【发布时间】:2013-06-10 18:53:39
【问题描述】:
我可以在下面使用这个 SELECT,去掉 24 小时的谬误并将其替换为 00 小时,然后运行 WHERE TRUNC(TO_DATE(FIX_DATETIME, 'MMDDYYHH24MISS')) BETWEEN TRUNC(SYSDATE-90) AND TRUNC(SYSDATE) ?可以一次性完成吗?如果是这样,无论是通过还是更多,如何?非常感谢您的帮助,并尊重您的技能水平。
SELECT MOPACTIVITY.MOPID,
(CASE
WHEN SUBSTR(MOPACTIVITY.MOPID, 7, 2) = '24' THEN SUBSTR(MOPACTIVITY.MOPID, 1, 2)||SUBSTR(MOPACTIVITY.MOPID, 3, 2)||SUBSTR(MOPACTIVITY.MOPID, 5, 2)||'00'||SUBSTR(MOPACTIVITY.MOPID, 9, 2)||SUBSTR(MOPACTIVITY.MOPID, 11, 2)
ELSE MOPACTIVITY.MOPID
END ) FIX_DATETIME,
sysdate "SYSDATE"
FROM MOPUSER.MOPACTIVITY
【问题讨论】:
-
为什么要将日期存储在 varchar 列中?这肯定会惹上麻烦。
-
大公司数据库。我已经要求改变,但它不会发生。这就是我为什么要尝试解决它的原因。有什么想法吗?
-
唯一的 明智的解决方案是将列更改为适当的
DATE列。其他一切都只是一个技巧。 -
我听到并同意你的看法,但改变不会发生。数据库不会改变,所以我必须破解它。我相信我已经向高层提出了这个问题,但我在大喊大叫。 :( 不知道如何破解它?