DATE

DATE
DATE
是日期数据类型,存储年、月、日三个部分,不包含时间和时区信息。适合存储与时间无关的日期数据,如生日、事件日期等。

语法

DATE'yyyy-MM-dd'

参数说明

参数格式说明
yyyy
yyyy
四位数字年份,如
2024
2024
MM
MM
两位数字月份,范围 01 到 12
dd
dd
两位数字日期,范围 01 到 31(取决于月份)

示例

  1. 使用 DATE 字面量:

    SELECT DATE'2024-01-15';

    返回:

    2024-01-15
    2024-01-15

  2. 将字符串转换为 DATE:

    SELECT CAST('2024-01-15' AS DATE);

    返回:

    2024-01-15
    2024-01-15

  3. 计算两个日期之间的天数差:

    SELECT DATEDIFF(DATE'2024-04-01', DATE'2024-03-15');

    返回:

    17
    17

  4. 日期加减(使用 INTERVAL):

    SELECT DATE'2024-01-15' + INTERVAL 30 DAY;

    返回:

    2024-02-14
    2024-02-14

  5. 将 DATE 转换为 TIMESTAMP:

    SELECT CAST(DATE'2024-01-15' AS TIMESTAMP);

    返回:

    2024-01-15 00:00:00
    2024-01-15 00:00:00
    (时间部分补零,按会话时区 UTC+8 显示)

  6. 无效日期的两种处理方式:

    -- CAST 字符串:无效日期返回 NULL SELECT CAST('2024-13-01' AS DATE); -- NULL(月份超范围) SELECT CAST('2023-02-29' AS DATE); -- NULL(2023 年无 2 月 29 日) -- DATE 字面量:无效日期直接报错 SELECT DATE'2023-02-29'; -- 报错:invalid date value: 2023-02-29

  7. NULL 值处理:

    SELECT CAST(NULL AS DATE);

    返回:

    NULL
    NULL

注意事项

  • DATE
    DATE
    是数据类型,不是函数。日期字面量语法为
    DATE'yyyy-MM-dd'
    DATE'yyyy-MM-dd'
    ,不要写成
    DATE('2024-01-15')
    DATE('2024-01-15')

  • DATE'...'
    DATE'...'
    字面量中的无效日期(如
    DATE'2023-02-29'
    DATE'2023-02-29'
    )在编译期直接报错
    CAST('...' AS DATE)
    CAST('...' AS DATE)
    中的无效日期在运行期返回 NULL。处理外部输入时应使用 CAST。

  • 月份或日期超出有效范围时,CAST 转换返回 NULL,不会报错。

  • DATE 不包含时间信息;如需存储时间,使用

    TIMESTAMP
    TIMESTAMP
    类型。

  • 将 DATE 转换为 TIMESTAMP 时,时间部分默认为

    00:00:00
    00:00:00
    (会话时区),内部以 UTC 存储。

  • 日期比较直接使用

    <
    <
    >
    >
    =
    =
    等运算符,无需额外转换。

  • 月末日期加减月份时,结果自动对齐到目标月的最后一天,不报错:

    SELECT DATE'2023-01-31' + INTERVAL '1' MONTH; -- 结果:2023-02-28(2 月无 31 日,自动对齐到月末) SELECT DATE'2023-03-31' + INTERVAL '1' MONTH; -- 结果:2023-04-30

联系我们
预约咨询
微信咨询
电话咨询