Oracle sql:具有AM和PM日期的as_of_date函数

时间:2014-06-20 18:50:11

标签: sql oracle oracle-sqldeveloper date-formatting

我这里有一个有线问题......

我有一个2011.01到2014.04的每日日期列,我试图通过last_day函数将其转换为月末日期。这是我的代码:

select distinct
    last_day(dates)
from db

我的日期格式如下:02-JAN-14 12.00.00.000000000 AM

我期待从31-JAN-201130-APR-2014的所有月末日期的列。一切正常,但我有两个31-JAN-14记录。

当我追踪此问题时,我发现它来自原始数据中的06-JAN-14 12.00.00.000000000 AM06-JAN-14 12.00.00.000000000 PM。我已经确认这是问题的根源,而我的所有其他数据都是AM格式。

为什么会这样?我该如何解决?

谢谢!

2 个答案:

答案 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约束。