OceanBase 日期字面量

2021-06-29 15:04 更新

日期(DATE)字面量可以通過(guò)字符串指定,或者可以使用 ?TO_DATE?函數(shù)將字符或數(shù)字值轉(zhuǎn)換為日期值。日期字面量是唯一接受用 ?TO_DATE? 表達(dá)式代替字符串指定值的:

TO_DATE('2020-03-25 11:05:00', 'YYYY-MM-DD HH24:MI:SS')

使用日期值指定日期字面量時(shí),必須使用公歷的日期值。同時(shí)也可以如下所示,使用 ANSI 來(lái)指定日期字面量,ANSI 日期字面量不包含時(shí)間信息,而且必須使用 YYYY-MM-DD 的格式:

DATE '2020-03-25'

此外,還可以使用數(shù)據(jù)庫(kù)默認(rèn)日期值來(lái)指定日期字面量,當(dāng)在日期表達(dá)式中使用默認(rèn)值時(shí),OceanBase 會(huì)自動(dòng)將默認(rèn)日期格式的字符值轉(zhuǎn)換為日期值。數(shù)據(jù)庫(kù)的默認(rèn)日期值由初始化參數(shù)?NLS_DATE_FORMAT? 指定,此示例中默認(rèn)格式為 DD-MON-RR :

TO_DATE('25-FEB-20', 'DD-MON-RR')

如果您指定不帶時(shí)間成分的日期值,則默認(rèn)時(shí)間為午夜(24 小時(shí)制 00:00:00 和 12 小時(shí)制 12:00:00)。如果指定的日期值不帶日期成分,則默認(rèn)日期為當(dāng)前月份的第一天。

OceanBase 數(shù)據(jù)庫(kù)中默認(rèn)的日期格式為 DD-MON-RR,如果需要同時(shí)顯示時(shí)間值,可以通過(guò)執(zhí)行 ?alter session set NLS_DATE_FORMAT = 'DD-MON-RR HH24:MI:SS'; ?命令修改變量 ?NLS_DATE_FORMAT? 的值。因此,如果查詢 DATE 列,則必須在查詢中指定時(shí)間字段,或確保 DATE 列中的時(shí)間字段設(shè)置為午夜。否則,數(shù)據(jù)庫(kù)可能不會(huì)返回您期望的查詢結(jié)果。比如創(chuàng)建一張具有 id 列和 datecol 日期列的表 Date_Literals

CREATE TABLE Date_Literals (id NUMBER, datecol DATE);

在表中插入當(dāng)前會(huì)話的系統(tǒng)日期時(shí)間 SYSDATE,此示例使用了 ?TRUNC? 函數(shù)將時(shí)間字段設(shè)置為午夜,?TRUNC? 函數(shù)會(huì)截取 SYSDATE 的日期部分,這樣 datecol 列中的時(shí)間會(huì)自動(dòng)填充默認(rèn)的午夜時(shí)間:

INSERT INTO Date_Literals VALUES (1,SYSDATE);
INSERT INTO Date_Literals VALUES (2,TRUNC(SYSDATE));

此時(shí)表中數(shù)據(jù)為:

+------+---------------------+
| id   | datecol             |
+------+---------------------+
|    1 | 25-FEB-20 11:28:16  |
|    2 | 25-FEB-20 00:00:00  |
+------+---------------------+

當(dāng)查詢中不包含時(shí)間信息時(shí),可以在查詢中使用大于或小于條件,而不是等于或不等于條件:

SELECT * FROM Date_Literals WHERE datecol > TO_DATE('2020-02-24', 'YYYY-MM-DD');

返回結(jié)果:

+------+---------------------+
| id   | datecol             |
+------+---------------------+
|    1 | 25-FEB-20 11:28:16  |
|    2 | 25-FEB-20 00:00:00  |
+------+---------------------+

當(dāng)使用等于條件時(shí),由于查詢中不包含時(shí)間信息,所以結(jié)果只返回了時(shí)間信息為午夜值的日期:

SELECT * FROM Date_Literals WHERE datecol = TO_DATE('2020-02-25', 'YYYY-MM-DD');

返回結(jié)果:

+------+---------------------+
| id   | datecol             |
+------+---------------------+
|    2 | 25-FEB-20 00:00:00  |
+------+---------------------+

反過(guò)來(lái),可以過(guò)濾掉 datecol 列中的時(shí)間字段,只查詢?nèi)掌谧侄危?/p>

SELECT * FROM Date_Literals WHERE TRUNC(datecol) = DATE '2020-02-25';

返回結(jié)果:

+------+---------------------+
| id   | detacol             |
+------+---------------------+
|    1 | 25-FEB-20 11:28:16  |
|    2 | 25-FEB-20 00:00:00  | 
+------+---------------------+
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)