You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle:如何将CURRENT_TIMESTAMP转为当日0点?提取今日数据ID报错

解决Oracle SQL提取今日修改数据ID的ORA-01843错误问题

问题分析

你碰到的ORA-01843错误源于无效的月份格式解析:原语句里的TO_DATE(CURRENT_DATE, 'DD-MON-RR')既逻辑冗余又依赖会话的NLS(国家语言支持)设置。CURRENT_DATE本身就是DATE类型,Oracle会先把它转成字符串(用当前会话的NLS_DATE_FORMAT规则),再用DD-MON-RR格式去解析。如果应用会话的NLS_DATE_LANGUAGE不是英文(比如中文环境),月份缩写无法匹配,就会触发这个错误。

最优解决方案

直接用TRUNC()函数把日期截断到当日00:00:00,这是Oracle里获取当日起始时间最简洁、可靠的方式,完全避开NLS依赖问题:

SELECT DISTINCT id
FROM changes_table
WHERE valid_to > TRUNC(CURRENT_DATE)

替代方案(若需基于CURRENT_TIMESTAMP处理)

如果一定要用CURRENT_TIMESTAMP转换为当日00:00:00,可以先截断时间部分再转成DATE类型:

SELECT DISTINCT id
FROM changes_table
WHERE valid_to > TRUNC(CURRENT_TIMESTAMP)

或者显式指定月份解析的语言,避免NLS冲突:

SELECT DISTINCT id
FROM changes_table
WHERE valid_to > TO_DATE(
    TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-RR', 'NLS_DATE_LANGUAGE=ENGLISH'),
    'DD-MON-RR',
    'NLS_DATE_LANGUAGE=ENGLISH'
)

内容的提问来源于stack exchange,提问作者Guzmicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:56:03