Oracle SQL TO_TIMESTAMP_TZ 格式问题 ORA-01843: not a valid month

Posted

技术标签:

【中文标题】Oracle SQL TO_TIMESTAMP_TZ 格式问题 ORA-01843: not a valid month【英文标题】:Oracle SQL TO_TIMESTAMP_TZ Format issue ORA-01843: not a valid month 【发布时间】:2021-03-12 12:42:20 【问题描述】:

我有一个以下格式的 TABLEA(更新的列已根据 UTC 调整了太平洋 TZ)

Status Updated
Complete 09/Mar/2021 08:27:30AM -1100
Apps Tasks 04/Mar/2021 12:42:12AM -1100
Complete 11/Mar/2021 09:27:30AM -1100
Complete 12/Feb/2021 10:27:30AM -1100

我使用下面的查询并按预期获取数据,但当我使用下面的查询生成图表时,我在 Oracle Apex 中收到“ORA-01843:不是有效月份”,因此我似乎弄乱了日期/时间戳格式。我一直在使用 to_date、to_char、trunc 以及 TO_TIMESTAMP_TZ 和 NLS_LANGUAGE 的组合调整查询,但似乎在循环。如果我在查询的格式中遗漏了某些内容,任何输入都将不胜感激?

select TRUNC(TO_TIMESTAMP_TZ(UPDATED),'MONTH') AS Month,COUNT(STATUS) AS "Complete" FROM TABLEA
where STATUS='Complete'
group by TRUNC(TO_TIMESTAMP_TZ(UPDATED), 'MONTH')
order by TRUNC(TO_TIMESTAMP_TZ(UPDATED), 'MONTH')
MONTH Complete
02/01/2021 1
03/01/2021 2

谢谢

【问题讨论】:

修复您的数据模型,以便使用适当的类型而不是字符串来存储日期/时间值。 【参考方案1】:

首先,您应该修复数据模型以使用适当的时间戳不是字符串来存储日期/时间值。

其次,我会使用日期返回结果:

select trunc(to_date(substr(update, 1, 11), 'DD/MMM/YYYY'), 'MON') as yyyymm,
       count(*)
from t
group by trunc(to_date(substr(update, 1, 11), 'DD/MMM/YYYY'), 'MON');

当然,您可以使用to_char() 随意设置第一列的格式。但是,我想强调的是,您的数据和代码应该使用dates 或timestamps。

【讨论】:

以上是关于Oracle SQL TO_TIMESTAMP_TZ 格式问题 ORA-01843: not a valid month的主要内容,如果未能解决你的问题,请参考以下文章

oracle sql与标准的sql语句的区别?

oracle会记录每次执行的sql语句吗

oracle 怎么查看过去的一条sql执行时间

oracle 中的 sql语句查询

怎么向oracle中导入大sql文件

sql nvarchar 对应oracle 啥类型