SQL 方言通

首页 / 日期

GETDATE 获取当前时间

GETDATE 是 MaxCompute 获取当前日期时间的函数,其他引擎要换成 NOW() 或 CURRENT_TIMESTAMP。迁移时要注意返回类型、精度和时区,以及同一条 SQL 里是否每行返回相同的值。

各引擎写法 · 迁移注意事项 · 示例

各引擎写法

引擎支持写法说明依据
MaxCompute支持GETDATE()返回 DATETIME,以东八区时间为标准。同一条 SQL 中总是返回固定值,精度到秒;开启 2.0 数据类型后精度到毫秒。官方文档
Hologres别名NOW() 或 CURRENT_TIMESTAMP返回当前事务的开始时刻,NOW、CURRENT_TIMESTAMP 和 TRANSACTION_TIMESTAMP 等效。需要每次调用都取实时时刻时用 CLOCK_TIMESTAMP。官方文档
StarRocks别名NOW([p])别名有 current_timestamp、localtime 和 localtimestamp,返回 DATETIME,默认精度到秒。3.1.6 起可以传 1~6 指定秒后的小数位数。结果受时区设置影响。官方文档
Doris别名NOW([precision])别名是 current_timestamp(),返回 DATETIME。precision 取 0~6,默认 0,超出范围时报错。官方文档
Hive别名current_timestampHive 1.2.0 起提供,返回查询开始时的时间戳,同一查询中各次调用结果相同。unix_timestamp() 无参写法从 2.0 起已废弃,文档建议改用 CURRENT_TIMESTAMP。官方文档
Spark SQL别名current_timestamp() 或 now()返回查询开始执行时的时间戳,同一查询中各次调用结果相同。3.4.0 起还有不带时区的 localtimestamp()。官方文档
Flink SQL别名CURRENT_TIMESTAMP 或 NOW()返回本地时区的 TIMESTAMP_LTZ(3)。流模式下每条记录都会重新求值,批模式下只在查询开始时求值一次。官方文档

迁移注意事项

示例

记录数据写入时间

MaxCompute
SELECT id, GETDATE() AS etl_time FROM src;
Hologres
SELECT id, NOW() AS etl_time FROM src;
StarRocks
SELECT id, NOW() AS etl_time FROM src;
Doris
SELECT id, NOW() AS etl_time FROM src;
Hive
SELECT id, current_timestamp AS etl_time FROM src;
Spark SQL
SELECT id, current_timestamp() AS etl_time FROM src;
Flink SQL
SELECT id, CURRENT_TIMESTAMP AS etl_time FROM src;

同类函数

最后核对日期: