Oracle数据库查询两日期区间数据的SQL语句修正求助
解决Oracle VARCHAR2类型日期区间查询的格式错误问题
你的SQL报错主要有两个原因:
- 格式字符串中的
T是固定分隔字符,Oracle要求用双引号包裹,否则会被当作格式符号解析,导致"date format not recognized"错误 TO_DATE函数不支持毫秒(SSS)解析,Oracle的DATE类型仅精确到秒级,毫秒部分会被忽略
以下是两种修正方案:
方案1:忽略毫秒,用TO_DATE查询
将格式串里的T用双引号括起来,若不需要毫秒精度,可直接去掉SSS部分:
select * from MY_TABLE where to_date(created_time, 'yyyy-MM-dd"T"HH:mm:ss') between to_date('2022-07-03T10:15:06', 'yyyy-MM-dd"T"HH:mm:ss') and to_date('2022-07-03T10:15:06', 'yyyy-MM-dd"T"HH:mm:ss');
如果保留原字符串的毫秒部分,TO_DATE会自动忽略,不影响秒级的区间比较。
方案2:保留毫秒精度,用TO_TIMESTAMP查询
若需要精确到毫秒的区间对比,改用TO_TIMESTAMP函数,同时用FF3匹配三位毫秒格式:
select * from MY_TABLE where to_timestamp(created_time, 'yyyy-MM-dd"T"HH:mm:ss.FF3') between to_timestamp('2022-07-03T10:15:06.091', 'yyyy-MM-dd"T"HH:mm:ss.FF3') and to_timestamp('2022-07-03T10:15:06.091', 'yyyy-MM-dd"T"HH:mm:ss.FF3');
额外建议:如果业务允许,建议将created_time字段修改为TIMESTAMP或DATE类型,避免字符串转日期带来的性能损耗和格式兼容问题。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

