ORA-01821日期格式不识别错误:时间戳转总秒数SQL执行失败
ORA-01821日期格式不识别错误:时间戳转总秒数SQL执行失败
嘿,我来帮你搞定这个问题!你遇到的ORA-01821错误,本质是用了Oracle不认识的日期格式掩码——'hhhhh'和'mmmmm'根本不是合法的格式符,Oracle当然会报错啦。
先给你拆解问题,再给两个靠谱的解决方案:
错误根源
你写的TO_CHAR(a.date_column, 'hhhhh')里的hhhhh是无效格式,Oracle中表示24小时制小时的格式符是HH24,分钟是MI,秒是SS;如果想直接获取午夜到当前时间的整数秒数,用SSSSS就可以(不过这个是不带毫秒的)。
解决方案1:快速获取整数秒(忽略毫秒)
如果你的需求只需要整数秒,不需要毫秒部分,直接用SSSSS格式符一步到位,代码更简洁:
SELECT TO_NUMBER(TO_CHAR(a.date_column, 'SSSSS')) AS seconds FROM your_table a;
比如你示例里的2018-04-02 04:24:22:000,运行后会得到15862(计算方式:43600 + 2460 + 22 = 15862)。
解决方案2:包含毫秒的总秒数
如果需要保留毫秒部分(你的timestamp带FF3三位毫秒),用EXTRACT函数拆解时间分量计算更准确:
SELECT EXTRACT(HOUR FROM a.date_column) * 3600 + EXTRACT(MINUTE FROM a.date_column) * 60 + EXTRACT(SECOND FROM a.date_column) AS total_seconds FROM your_table a;
这个语句会返回带小数的秒数,比如示例中的那条数据会得到15862.000,完美保留毫秒信息。
另外提一句,你生成date_column的拼接方式是没问题的,但如果a.dte本身就是日期类型,其实可以不用TO_CHAR转字符串,直接拼接就行,不过这不是导致错误的原因,只是个小优化~
备注:内容来源于stack exchange,提问作者Anthony Gonzales
相关产品推荐
相关产品推荐

