Обратите внимание, что Firebird не учитывает локальные форматы даты Windows или Linux при интерпретации литералов даты (ни на сервере, ни на клиенте). Его интерпретация числовых форматов дат основывается на символе-разделителе. Если точка (.) используется в качестве разделителя, Firebird интерпретирует дату в виде неамериканской нотации DD.MM, в то время как любой другой разделитель предполагает американскую нотацию MM/DD. Чтобы убрать американскую интерпретацию даты, ваши приложения должны преобразовать введенную дату DD/MM/CCYY в литерал, где наклонная черта заменена на символ точки в качестве разделителя. Дата 'DD.MM.CCYY' правильная. Могут быть использованы и другие форматы литералов даты.
Пробелы в литералах даты
Пробелы или символы табуляции могут присутствовать между элементами. Дата должна быть отделена от времени, по меньшей мере, одним пробелом.
Заключение в апострофы литералов даты
Литералы даты должны быть заключены в апострофы (ASCII 39). Допустимы только апострофы, а не двойные кавычки.
Литералы месяца
В табл. 10.4 показаны литералы месяцев.
Таблица 10.4. Литералы месяцев и правильное английское написание
Число | Аббревиатура (не чувствительно к регистру) | Полное название месяца (не чувствительно к регистру) |
01 | JAN | January |
02 | FEB | February |
03 | MAR | March |
04 | APR | April |
05 | MAY | May |
06 | JUN | June |
07 | JUL | July |
08 | AUG | August |
09 | SEP | September |
10 | OCT | October |
11 | NOV | November |
12 | DEC | December |
Примеры литералов даты
Двадцать пятое число (25) шестого месяца (июнь) 2004 года может быть представлено любым из следующих способов:
'25.6.2004' '06/25/2004' 'June 25, 2004'
'25.jun.2004' '6,25,2004' '25,jun,2004'
'25jun2004' '6-25-04' 'Jun 25 04'
'25 jun 2004' '2004 June 25' '20040625'
'25-jun-2004' '2004-jun-25' '20040625'
'25 JUN 04' '2004-06-25' '2004,25,06'
Предварительно определенные литералы даты
Firebird поддерживает группу "предопределенных" литералов дат - английские слова, заключенные в апострофы, которые Firebird выбирает или вычисляет и интерпретирует в контексте соответствующего типа даты/времени. Слова 'TODAY', 'NOW, 'YESTERDAY' и 'TOMORRROW интерпретируются, как показано в табл. 10.5.
Таблица 10.5. Предварительно определенные литералы даты
Литерал | Тип диалекта 3 | Тип диалекта 1 | Значение |
'NOW' | TIMESTAMP | DATE | Дата и время сервера, которые были текущими на момент старта операции DML. 'NOW' будет преобразовано и корректно сохранено в полях DATE, TIME и TIMESTAMP В диалекте 3 или в полях DATE в диалекте 1. Как и эквивалентная контекстная переменная CURRENT_TIMESTAMP, значение всегда сохраняется с долями секунды ' .0000' * |
' TODAY' | DATE | DATE хранится с временем равным '00:00:00' | Дата и время сервера, которые были текущими на момент старта операции. Если в процессе операции миновала полночь, дата не изменяется. Эквивалентен контекстной переменной диалекта 3 CURRENT_DATE. Недопустим для полей типа TIME |
'TOMORRROW' | DATE | DATE хранится с временем равным '00:00:00' | Дата и время сервера, которые были текущими на момент старта операции, плюс 1 день. Если в процессе операции миновала полночь, дата, из которой была вычислена дата 'TOMORRROW', не изменяется. Недопустим для полей типа TIME |
'YESTERDAY' | DATE | DATE хранится с временем равным '00:00:00' | Дата и время сервера, которые были текущими на момент старта операции, минус 1 день. Если в процессе операции миновала полночь, дата, из которой была вычислена дата 'YESTERDAY', не изменяется. Недопустим для полей типа TIME |