【发布时间】:2015-07-03 08:19:52
【问题描述】:
我在下面的 sql 中收到错误:
ORA-01858:在需要数字的地方发现了一个非数字字符
SELECT c.contract_num,
CASE
WHEN ( MAX (TO_CHAR (TO_DATE (c.event_dt, 'YYYY-MM-DD'), 'MMDD'))
- MIN (TO_CHAR (TO_DATE (c.event_dt, 'YYYY-MM-DD'), 'MMDD')))
/ COUNT (c.event_occurrence) < 32
THEN
'Monthly'
WHEN ( MAX (
TO_CHAR (TO_DATE (c.event_dt, 'YYYY-MM-DD'), 'MMDD'))
- MIN (
TO_CHAR (TO_DATE (c.event_dt, 'YYYY-MM-DD'), 'MMDD')))
/ COUNT (c.event_occurrence) >= 32
AND ( MAX (
TO_CHAR (TO_DATE (c.event_dt, 'YYYY-MM-DD'), 'MMDD'))
- MIN (
TO_CHAR (TO_DATE (c.event_dt, 'YYYY-MM-DD'), 'MMDD')))
/ COUNT (c.event_occurrence) < 91
THEN
'Quarterley'
ELSE
'Yearly'
END
FROM ps_ca_bp_events c
GROUP BY c.contract_num;
【问题讨论】:
-
您的 event_dt 列的数据类型是什么?另外,为什么要将日期转换为字符串并减去它们?目的是什么?如果要查找两个日期之间的天数,请考虑如果最大日期是 12 月 12 日,最小日期是同一年的 11 月 31 日,您可能会得到什么结果。如果他们在不同的年份呢?
-
event_dt 列是日期类型。
-
如果已经是约会了,你为什么还要
TO_DATE呢?!
标签: oracle