PostgreSQL 8.3 и поиск по полям с датой

Доброго времени суток! Сразу же непосредственно к сабжу.
На 8.0 осуществлял поиск по полям с датой следующим образом:
SELECT....
FROM....
WHERE.... and viewName."столбецName" LIKE 'гггг-мм-дд'
где гггг - год, мм - месяц, дд - день, а viewName."столбецName" - есть поле дат.
Допустим надо найти всех 'дядек', у ктоторых что-то там в феврале, имеем шаблон для поиска: ...LIKE '____-02-__'.
Итак, 8.0 всё корректно возвращает, а 8.3 ругается :)
Ошибка типа:

ERROR: operator does not exist: date ~~ unknown
LINE 3: where viewName."столбецName" like '____-__-__'
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.

как быть? подскажите...

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Ужас! Есть же

Ужас! Есть же функции для работы с датами - пользуйтесь ими. Мне даже предположить трудно НАСКОЛЬКО у вас тормозило!

Вообще использовать LIKE на поля типа DATE абсолютно неправильно! То что при выборке вы видите символьное представление 'ГГГГ-ММ-ДД' вовсе не означает, что внутри оно так и хранится. Возможно внутренняя логика поменялась и как следствие перестало работать.
-----------------------------------------------------------------------------------
"ls /" (C) Козьма Прутков

Выше сказали

Выше сказали совершенно верно,
если очень хочется оставить все как есть,
приводите явно дату к строке,
to_char

Спасибо,

Спасибо, действительно гляну документацию - to_char идеальный вариант в моём лучае..

SELECT .....to_char(курсор."дата" 'DD.MM.YYYY г.') AS "дата"
....
WHERE "дата" <strong>LIKE</strong> 'шаблон'

Имеем дату формата 'XX.YY.ZZ г.'. Дату можно возвращать из базы вообще как угодно :)

Но гораздо

Но гораздо прямее было бы не использовать ни to_char ни LIKE
Если надо что-то в феврале 2008, то не надо никаких шаблонов. Простейшее сравнение

WHERE "дата" >= '01-02-2008' AND "дата" <'01-03-2008'

если по "дата" построен индекс, работать будет в разы быстрее.
-----------------------------------------------------------------------------------
"ls /" (C) Козьма Прутков

а еслу вдруг

а еслу вдруг нужно найти всех, у кого день рожденье именно в 'июне', но совсем не важно в каком году...? а если надо увидеть людей, которые родились именно 15ого числа 1975 года, но всё равно в каком месяце ?:) только поискам по подстрокам...увы))

А доку почитать

А доку почитать слабо?
http://www.postgresql.org/docs/8.3/interactive/functions-datetime.html

а если вдруг нужно найти всех, у кого день рожденье именно в 'июне', но совсем не важно в каком году...?

select * from ... where date_part('month', поле_с_датой) = 6;

а если надо увидеть людей, которые родились именно 15ого числа 1975 года,

select * from ... where date_part('day', поле_с_датой) = 15 and date_part('year', поле_с_датой)=1975 ;

-----------------------------------------------------------------------------------
"ls /" (C) Козьма Прутков

точно)

точно)

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023