问题描述
我有以下格式的 TABLEA(更新的列已根据 UTC 调整了太平洋 TZ)
状态 | 更新 |
---|---|
完成 | 09/Mar/2021 08:27:30AM -1100 |
应用任务 | 04/Mar/2021 12:42:12AM -1100 |
完成 | 11/Mar/2021 09:27:30AM -1100 |
完成 | 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 | 完成 |
---|---|
02/01/2021 | 1 |
03/01/2021 | 2 |
谢谢
解决方法
首先,您应该修复数据模型以使用适当的时间戳(不是字符串)来存储日期/时间值。
其次,我会使用日期返回结果:
select trunc(to_date(substr(update,1,11),'DD/MMM/YYYY'),'MON') as yyyymm,count(*)
from t
group by trunc(to_date(substr(update,'MON');
当然,您可以使用 to_char()
随意设置第一列的格式。但是,我想强调的是,您的数据和代码应该使用 date
或 timestamp
。