首批通过分布式安全可靠测评,为关键业务系统打造
日期计算操作
更新时间:2026-04-14 17:41:09
本文介绍日期计算操作相关函数的使用方法。
注意
函数中的当前时间是基于 ODP 计算的,和 OBServer 节点的计算会存在偏差。使用 hash 分区且包含当前时间计算的场景下,无法准确路由。
Oracle/MySQL 函数
MySQL 中和日期计算相关的函数包含 CURDATE/CURRENT_DATE、CURTIME/CURRENT_TIME 和 CURRENT_TIMESTAMP/NOW。
Oracle 中和日期计算相关的函数包含 CURRENT_DATE、CURRENT_TIMESTAMP、SYSTIMESTAMP 和 SYSDATE。
说明
Oracle 函数后不允许加括号,而 MySQL 函数后允许加括号。
Oracle 模式下,不支持
CURRENT_TIMESTAMP(precision)用法。
此处假设数据库中存在表 t1,c1 列为分区键。从表 t1 中选取所有 c1 列值等于当前系统日期按照 YYYY/MM/DD 格式转换后的字符串的行,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=to_char(sysdate,'YYYY/MM/DD');
TO_DATE
TO_DATE 函数的作用是将字符串转换为日期或日期时间类型数据。目前仅支持 to_date(char,[fmt]) 用法:
char为待转换的字符串,表示一个具体的日期和时间。fmt为可选值,用于设置转换格式。
此处假设数据库中存在表 t1,c1 列为分区键。查询 t1 表中所有 c1 列值与字符串 20230823024916 按照指定格式转换后的日期时间相等的行,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=TO_DATE('20230823024916','YYYYMMDDHH24MISS');
TO_TIMESTAMP
TO_TIMESTAMP 函数的作用是将字符串转换为 timestamp 类型的日期时间数据。目前仅支持 to_timestamp(str, [fmt]) 用法:
str为待转换的字符串,表示一个具体的日期和时间。fmt为可选值,用于设置转换格式。
此处假设数据库中存在表 t1,c1 列为分区键。查询 t1 表中所有 c1 列值与字符串 20230823191416 按照指定格式转换后的 timestamp 类型时间戳相等的行,ODP 可以将该 SQL 请求准确路由。示例如下:
select * from t1 where c1=to_timestamp('20230823191416','YYYY-MM-DD HH24:MI:SSXFF');