Почему этот запрос postgres работает?

SELECT NOW() - INTERVAL '$1 DAY';

Я не понимаю, почему этот запрос работает. В запросе указан неверный литерал $.

1 ответ

Решение

При разборе timestamp или же interval значения, PostgreSQL игнорирует печатные символы, которые не являются +, -, ., цифра или буквенный символ.

Увидеть ParseDateTime в src/backend/utils/adt/datetime.c:

/* ignore other punctuation but use as delimiter */
else if (ispunct((unsigned char) *cp))
{
    cp++;
    continue;
}

От man ispunct:

ispunct()
      checks for any printable character which is not a space or an
      alphanumeric character.
Другие вопросы по тегам