Firebird и SELECT с поле тип TimeStamp

3 отговора 331 прегледа
#1

Firebird и SELECT с поле тип TimeStamp

Имам таблица на Firebird 1.5.2 в която има колона от тип TimeStamp. Как мога да избера всички записи от таблицата от определен месец, например "февруари" директно със SELECT заявка? Нещо от сорта на:

SELECT * FROM my_table WHERE dt_stamp = '02.2005'

Tова естествено дава грешка - какво да напиша след WHERE?

Мерси предварително!

Отговор
в отговор на Misho #2

Re: Firebird и SELECT с поле тип TimeStamp

За Февруари:
SELECT * FROM my_table WHERE extract( month from dt_stamp)=2
За Февруари 2005 може
SELECT * FROM my_table WHERE extract( month from dt_stamp)=2 and extract( year from dt_stamp)=2005
но няма да ползва индекси.
По-добро е:
SELECT * FROM my_table WHERE dt_stamp>='1.2.2005' and dt_stamp<'1.3.2005'

Редактирано от NDeu на

Отговор
в отговор на NDeu #3

Re: Firebird и SELECT с поле тип TimeStamp

Третият вариант наистина е най-удачен, благодаря за идеята.

Още един въпрос по отношение на датите: как се интерпретира формата на датата (напр. "dd.mm.yy") и зависи ли той от регионалните настройки на машината, на която е пуснат сървъра? По-точно, от какво се определя какъв да бъде разделитея (точката в случая), и дали месеца е първото или второто число в датата (напр. в 1.3.2005)?

10x отново!

Отговор
в отговор на Misho #4

Re: Firebird и SELECT с поле тип TimeStamp

Формата на датата на сървъра е твърдо кодиран и не зависи от рег. настройки.
select 'равни' from rdb$database

where cast('25 Dec 2005' as DATE)=cast('25.12.2005' as date)
and cast('25 Dec 2005' as DATE)=cast('12/25/2005' as date)
and cast('25 Dec 2005' as DATE)=cast('12-25-2005' as date)
and cast('25 Dec 2005' as DATE)=cast('25-Dec-2005' as date)


Редактирано от NDeu на

Отговор