Date子句在Where子句Oracle中

时间:2014-11-04 09:11:36

标签: oracle datetime

似乎有很多查询语法来获取oracle数据库上的数据,这里我只是想问一下这个查询运行正常,但我根本无法理解。查询是:

Select
....
From
...
Where
TO_CHAR(TO_DATE('01/01/1970 00:00:00', 'MM/DD/YYYY HH24:MI:SS') +
(create_date  / ( 60 * 60 * 24 )),
'MM/DD/YY HH24:MI:SS') = '06/30/14 21:41:11'
;

从上面的查询中可以正常工作。但我不明白为什么 TO_DATE('01 / 01/1970 00:00:00','MM / DD / YYYY HH24:MI:SS (create_date /(60 * 60) * 24)),     'MM / DD / YY HH24:MI:SS')

create_date 字段中显示unix datetime,例如1404164471

有人可以解释一下吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

TO_DATE('01/01/1970 00:00:00', 'MM/DD/YYYY HH24:MI:SS')将某种格式的字符串(第一个参数)转换为日期。

(create_date / ( 60 * 60 * 24 )) create_date 包含秒数,此表达式将其转换为天数(1分钟= 60秒,1小时= 60分钟,1天= 24小时=> 60 * 60 * 24 =一天中的秒数)。当您向某个日期添加号码时,Oracle认为此号码包含您需要进行此类对话的日期。

TO_DATE('01/01/1970 00:00:00', 'MM/DD/YYYY HH24:MI:SS') + (create_date / ( 60 * 60 * 24 ))为您提供存储在create_date中但在"传统"中的日期。格式

似乎你需要将unix时间与日期进行比较。最好使用这个条件:

Select
....
From
...
Where create_date = trunc( (TO_DATE('06/30/14 21:41:11', 'MM/DD/YY HH24:MI:SS') 
                          - TO_DATE('01/01/1970 00:00:00', 'MM/DD/YYYY HH24:MI:SS')
                           ) * 24 * 60 * 60
                         );

答案 1 :(得分:1)

外部to_char(,)从计算日期创建一个字符串。这样就可以将它与字符串' 06/30/14 21:41:11'进行比较。

在to_char中,正在进行一些计算,即添加到日期值。

TO_DATE('01/01/1970 00:00:00', 'MM/DD/YYYY HH24:MI:SS') 
+ (create_date  / ( 60 * 60 * 24 ))

to_date函数采用字符串格式的日期值(' 01/01/1970 00:00:00')和格式字符串(' MM / DD / YYYY HH24:MI :SS')告诉它如何解释日期值。

create_date似乎是一个以秒为单位的数字9,可能是自01-01-1970以来)。它被一天中的秒数分开,因此将导致数天。所以你得到的是真实日历值的创建日期。