Datetime Literals
Formally, the SQL standard defines datetime literals as a prefix DATE
, TIME
and TIMESTAMP
followed by a string literal with a datetime format.Historically, Firebird documentation has referred to these datetime literals as “shorthand casts”.
Since Firebird 4.0, the use of datetime mnemonics in datetime literals (e.g. DATE 'TODAY'
) is no longer allowed.
Caution
|
The format of datetime literals and strings in Firebird 4.0 and higher is more strict compared to earlier Firebird versions. |
<datetime_literal> ::= DATE '<date_format>' | TIME { '<time_format>' | '<time_tz_format>' } | TIMESTAMP { '<timestamp_format>' | '<timestamp_tz_format>' }
<date_format> ::= [YYYY<p>]MM<p>DD | MM<p>DD[<p>{ YYYY | YY }] | DD<p>MM[<p>{ YYYY | YY }] <time_format> ::= HH[:mm[:SS[<f>NNNN]]] <timestamp_format> ::= <date_format> [<space> <time_format>] <time_zone> ::= { + | - }HH:MM | time zone name (e.g. Europe/Berlin) <time_tz_format> ::= <time_format> [<space>] <time_zone> <timestamp_tz_format> ::= <timestamp_format> [<space>] <time_zone> <p> ::= whitespace | . | - | / <f> ::= : | .
Argument | Description |
---|---|
datetime_literal |
Datetime literal |
date_format |
Format of date |
time_format |
Format of time |
timestamp_format |
Format of timestamp |
time_zone |
Format of time zone |
time_tz_format |
Format of time with time zone |
timestamp_tz_format |
Format of timestamp with time zone |
YYYY |
Four-digit year |
YY |
Two-digit year |
MM |
MonthIt may contain 1 or 2 digits (1-12 or 01-12).You can also specify the three-letter shorthand name or the full name of a month in English.Case-insensitive |
DD |
Day.It may contain 1 or 2 digits (1-31 or 01-31) |
HH |
Hour.It may contain 1 or 2 digits (0-23 or 00-23) |
mm |
Minutes.It may contain 1 or 2 digits (0-59 or 00-59) |
SS |
Seconds.It may contain 1 or 2 digits (0-59 or 00-59) |
NNNN |
Ten-thousandths of a second.It may contain from 1 to 4 digits (0-9999) |
p |
A date separator, any of permitted characters.Leading and trailing spaces are ignored.The choice of separator in a date decides whether the parser reads |
f |
Fractional seconds separator |
Important
|
Use of the complete specification of the year in the four-digit form — |
-- 1
UPDATE PEOPLE
SET AGECAT = 'SENIOR'
WHERE BIRTHDATE < DATE '1-Jan-1943';
-- 2
INSERT INTO APPOINTMENTS
(EMPLOYEE_ID, CLIENT_ID, APP_DATE, APP_TIME)
VALUES (973, 8804, DATE '1-Jan-2021' + 2, TIME '16:00');
-- 3
NEW.LASTMOD = TIMESTAMP '1-Jan-2021 16:00';
Tip
|
Although the Firebird datetime syntax is flexible, to avoid ambiguity we recommend using the ISO-8601 order (year-month-day), ‘ In short, use |