使用日期值指定日期字面量时,必须使用公历的日期值。同时也可以如下所示,使用 ANSI 来指定日期字面量,ANSI 日期字面量不包含时间信息,而且必须使用 YYYY-MM-DD 的格式:

      此外,还可以使用数据库默认日期值来指定日期字面量,当在日期表达式中使用默认值时,OceanBase 会自动将默认日期格式的字符值转换为日期值。数据库的默认日期值由初始化参数 NLS_DATE_FORMAT 指定,此示例中默认格式为 DD-MON-RR

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

      如果您指定不带时间成分的日期值,则默认时间为午夜(24 小时制 00:00:00 和 12 小时制 12:00:00)。如果指定的日期值不带日期成分,则默认日期为当前月份的第一天。

      1. CREATE TABLE Date_Literals (id NUMBER, datecol DATE);

      在表中插入当前会话的系统日期时间 SYSDATE,此示例使用了 函数将时间字段设置为午夜,TRUNC 函数会截取 SYSDATE 的日期部分,这样 datecol 列中的时间会自动填充默认的午夜时间:

      此时表中数据为:

      1. +------+---------------------+
      2. +------+---------------------+
      3. | 1 | 25-FEB-20 11:28:16 |
      4. | 2 | 25-FEB-20 00:00:00 |
      5. +------+---------------------+

      当查询中不包含时间信息时,可以在查询中使用大于或小于条件,而不是等于或不等于条件:

        1. +------+---------------------+
        2. | id | datecol |
        3. +------+---------------------+
        4. | 1 | 25-FEB-20 11:28:16 |
        5. | 2 | 25-FEB-20 00:00:00 |
        6. +------+---------------------+

        当使用等于条件时,由于查询中不包含时间信息,所以结果只返回了时间信息为午夜值的日期:

        返回结果:

        1. | id | datecol |
        2. | 2 | 25-FEB-20 00:00:00 |
        3. +------+---------------------+

        反过来,可以过滤掉 datecol 列中的时间字段,只查询日期字段:

        1. SELECT * FROM Date_Literals WHERE TRUNC(datecol) = DATE '2020-02-25';
        1. +------+---------------------+
        2. | id | detacol |
        3. +------+---------------------+
        4. | 1 | 25-FEB-20 11:28:16 |
        5. | 2 | 25-FEB-20 00:00:00 |