Почему этот запрос 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.