Вы не можете выбрать полный hire_date
, если вы группируете только по последним четырем его цифрам. Подумайте, что произойдет, если у вас есть две строки:
hire_date
=========
01/01/2001
02/02/2001
Каким должен быть hire_date
в одной строке, созданной при их группировке?
Каждый выбранный столбец должен быть столбцом группировки или сводным столбцом. Другими словами, попробуйте:
select substr(hire_date,-4), count(*)
from employees
group by substr(hire_date,-4)
order by empl.hire_date;
Я должен упомянуть, что построчные функции, как известно, плохо масштабируются. Если вы хотите много обрабатывать год, вам следует подумать о том, чтобы разделить его на отдельный столбец. Это может значительно повысить производительность, но измеряйте, а не гадайте!
И, как отмечали другие в комментариях, substr
, вероятно, не лучшее решение, поскольку это может зависеть от локали (например, дата может быть отформатирована как YYYY-MM-DD
, что не будет хорошо сочетаться с substring
).
Возможно, лучше использовать что-то вроде to_char(hire_date,'YYYY')
или extract (year from hire_date)
, которые должны быть более надежными.
person
paxdiablo
schedule
26.05.2011
substr()
в столбцеdate
? substr() для столбцов varchar. Если вам нужно получить части даты, вы должны вместо этого использоватьto_char()
(или извлечь). Вы полагаетесь на неявное преобразование данных, которое обязательно сломается при изменении настроек локали. - person a_horse_with_no_name   schedule 26.05.2011