UPDATE ATABLE
SET TIME_ELAPSED = (FINISHED - STARTED) * 24 * 60
WHERE ((FINISHED IS NOT NULL) AND (STARTED IS NOT NULL));
Литералы даты являются "читаемыми человеком" строками, заключенными в апострофы. Их сервер Firebird распознает как константы даты или даты-и-времени для EXTRACT и других выражений, операций INSERT и UPDATE, а также в предложении WHERE оператора SELECT.
Литералы даты используются, когда нужно передать константы даты:
* операторам SELECT, UPDATE и DELETE в условия поиска предложения WHERE;
* операторам INSERT и UPDATE для ввода констант даты и времени;
* аргументу FROM функции EXTRACT().
Распознаваемые форматы литералов даты и времени
Количество форматов строк, распознаваемых как литералы даты, ограничено. Эти форматы используют шаблоны для подстановки элементов строк. Табл. 10.1 описывает используемые соглашения.
Таблица 10.1. Элементы литералов даты
Элемент |
Представление |
CC |
Столетие. Первые две цифры года (например, 20 для двадцать первого века) |
YY |
Год столетия. Firebird всегда сохраняет полное значение года, даже если год был введен без сегмента cc, при этом используется алгоритм "скользящего окна" для определения того, какое столетие сохранять |
MM |
Месяц- целое в диапазоне от 1 до 12. В некоторых форматах требуется две цифры |
MMM |
Месяц - один из [JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC] . Также допустимы полные английские названия месяцев |
DD |
День месяца- целое в диапазоне от 1 до 31. В некоторых форматах требуется две цифры. Неверное значение дня для конкретного месяца вызывает ошибку |
HH |
Часы - целое в диапазоне от 00 до 23. Требуются две цифры |
NN |
Минуты - целое в диапазоне от 00 до 59. Требуются две цифры |
SS |
Полные секунды - целое в диапазоне от 00 до 59. Требуются две цифры |
nnnn |
Десятитысячные доли секунды в диапазоне от 0 до 9999. Значение по умолчанию 0000. Если используется, то требуется четыре цифры |
Распознаваемые форматы описаны в табл. 10.2.
Таблица 10.2. Распознаваемые форматы литералов даты и времени
Формат |
Диалект 3 DATE |
Диалект 3 TIMESTAMP |
DATE |
' CCYY-MM-DD' или 'YY-MM-DD' |
Сохраняет только дату |
Сохраняет дату и время в виде 00:00:00 |
Сохраняет дату и время в.виде 00:00:00 |
'MM/DD/CCYY' или 'MM/DD/YY' |
То же |
То же |
То же |
'DD.MM.CCYY' или 'DD.MM.YY' |
То же |
То же |
То же |
' DD-MMM-CCYY' или 'DD-MMM-YY' |
То же |
То же |
То же |
'DD,MMM,CCYY' или ' DD,MMM,YY' |
То же |
То же |
То же |
'DD MMM CCYY' или 'DD MMM YY' |
To же |
То же |
То же |
'DDMMMCCYY' или 'DDMMMYY' |
To же |
То же |
То же |
В элементе MMM также допустимы полные английские названия месяцев, нечувствительные к регистру. Правильные названия приведены в табл. 10.3
'CCYY-MM-DD HH:NN:SS.nnnn' или 'YY-MM-DD HH:NN:SS.nnnn' (элемент ".nnnn" необязателен) |
Сохраняет только дату; может потребовать преобразования для даты. Время не сохраняется |
Сохраняет дату и время |
Сохраняет дату и время |
'MM/DD/CCYYHH:NN:SS.nnnn' или 'MM/DD/YY HH:NN:SS.nnnn' |
То же |
То же |
То же |
' DD.MM.CCYYHH:NN:SS.nnnn' или 'DD.MM.YY HH:NN:SS.nnnn' |
То же |
То же |
То же |
'DD-MMM-CCYY HH:NN:SS.nnnn' или 'DD-MMMYY HH:NN:SS.nnnn' |
То же |
То же |
То же |
Типы TIMESTAMP в диалекте 3 и DATE в диалекте 1 принимают дату и время в литерале даты. Литерал даты без времени будет сохранен и с временем в виде ' 00: 00: 00'.
Тип DATE в диалекте 3 принимает только дату. Тип данных TIME принимает только время.
"Скользящее окно века" в Firebird
Независимо от того, как представлена часть года в литерале DATE или TIMESTAMP, в виде CCYY или YY, Firebird всегда сохраняет полное значение года. Он обращается к алгоритму получения части cc (столетие). Он также всегда включает столетие при поиске типов даты. Клиентские приложения отвечают за отображение года в виде двух или четырех цифр.
Для получения столетия Firebird использует алгоритм скользящего окна. Задача заключается в интерпретации двухсимвольного значения года как ближайшего к текущему году в интервале предшествующих и последующих 50 лет.
Например, если текущий год 2004, то двухсимвольные значения года будут интерпретироваться, как показано в табл. 10.3.
Таблица 10.3. Определение года по двухсимвольному виду, если текущим является 2004 год
Двухсимвольный год
|
Полученный год
|
Рассчитывается как
|
98
|
1998
|
(2004 - 1998 = 6) < (2998 - 2004 = 94)
|
00
|
2000
|
(2004 - 2000 = 4) < (2100 - 2004 = 96)
|
45
|
Читать дальше