我这里有一个有线问题......
我有一个2011.01到2014.04的每日日期列,我试图通过last_day
函数将其转换为月末日期。这是我的代码:
select distinct
last_day(dates)
from db
我的日期格式如下:02-JAN-14 12.00.00.000000000 AM
我期待从31-JAN-2011
到30-APR-2014
的所有月末日期的列。一切正常,但我有两个31-JAN-14
记录。
当我追踪此问题时,我发现它来自原始数据中的06-JAN-14 12.00.00.000000000 AM
和06-JAN-14 12.00.00.000000000 PM
。我已经确认这是问题的根源,而我的所有其他数据都是AM
格式。
为什么会这样?我该如何解决?
谢谢!
答案 0 :(得分:2)
" last_day"函数将Oracle日期的DAYS部分转移到该月的最后一天,但它没有触及小时部分。
看看这个:
select to_char(last_day(sysdate), 'HH24:MI') from dual;
17:03
相反,请尝试在执行last_day之前截断日期:
select distinct
last_day(trunc(dates))
from db
应该这样做。
答案 1 :(得分:0)
为什么:
有人插入了时间部分
的记录修正:
..将取决于你需要什么......
您可以删除一条记录(based on trunc(dates) <> dates
)
您可以删除&#34;时间部分&#34;与UPDATE ... where trunc(dates) <> dates
您可以使用select trunc(dates) ... or select to_char(dates, 'YYYYMMDD')
您可能有兴趣在该字段上添加一个始终有0次的CHECK约束。