year()
поддерживается не во всех СУБД (в частности, Oracle или Postgres, которые вы, похоже, используете, не поддерживают его). Вместо этого используйте стандартную функцию sql extract()
:
extract(year from Birthdate)
Это работает, если Birthdate
имеет тип данных date
. Если это строка в каком-либо формате, вам нужно сначала преобразовать ее в дату, используя to_date()
в Oracle, например:
extract(year from to_date(Birthdate, 'yyyy-mm-dd'))
В других СУБД есть разные функции для преобразования строк в даты.
Наконец, обратите внимание, что более эффективно избегать использования функций при фильтрации, поскольку это приводит к потере индекса для фильтруемого столбца. Обычно вы хотите делать сравнения по всей дате, поэтому:
Birthdate >= to_date('2002-01-01', 'yyyy-mm-dd') and
Birthdate < to_date('2003-01-01', 'yyyy-mm-dd')
Примечание: дескриптор формата для '01-Jun-2005'
будет 'dd-mon-yyyy'
, а не 'dd-mm-yyyy'
.