2016-04-25 203 views
1

例如,我有一个像这样的日期时间'2016-04-02 00:00:00',另一个像这样的'2016-04-02 15:10:00'。我不在乎时间部分,我希望他们仅仅通过日期部分匹配。如何将Oracle DateTime转换为日期

我试过date()to_date,datepart,没有什么效果。

+0

我很好奇..你为什么需要这样做?你想解决什么大问题? – Ditto

+0

什么是你的日期?什么是你的约会?请举例或类似你的愿望目标 –

+0

因为我有一个条件,必须与日期时间的日期匹配......但它不符合兼职时间。我希望你明白我的意思。 – servatj

回答

2

做这样的:

where yourField >= the start of your date range 
and yourField < the day after the end of your date range 

编辑从这里开始:

虽然你可以使用trunc,别人的建议请记住,对函数结果进行过滤通常会很慢。

1

正如其他人所说 - Oracle中没有单独的“日期”数据类型。将纯粹的“日期”存储为时间部分设置为00:00:00(一天的午夜)的日期,并且TRUNC(日期)将采用任何日期并截断时间至00:00 :00,所以如果你需要比较两个日期,你可以写

where trunc(date_1) = trunc(date_2) 

如果你的表是非常大的,你需要经常做这些比较,这是不理想的,因为内函数调用包装列的值(如date_1在TRUNC中)可以防止使用您在date_1列上可能具有的索引。如果你需要比较两列中的约会,你可能没有多少选择的余地,但如果你比较固定的日期(或类似的东西SYSDATE),你可能会更好的东西去像

where date_1 >= trunc(sysdate) and date_1 < trunc(sysdate) + 1 

给你不在列值上使用trunc,因此如果列上有索引,Oracle可以自由使用它 - trunc(sysdate)只计算一次,而不是每一行。顺便说一句“+1”的意思是“增加一天”。

TO_DATE将字符串转换为日期;如果您将TO_DATE应用于已经是合法日期的值,则会得到意想不到的结果,因为Oracle会首先将您的真实日期转换为字符串,然后再次返回日期,并且由于这些转换需要字符串的日期FORMAT,并且Oracle假定从日期到字符串以及从字符串到日期的转换格式可能不匹配,....您会明白。据我所知,Oracle中不存在DATE()(函数)和DATEPART;当您使用新的语言时,请将Google关闭并经常使用它。

如果您输入的是没有时间分量的日期,例如TO_DATE('04-apr-2016, 'dd-mon-yyyy'),则隐式时间为00:00:00,因此您不需要对其应用TRUNC()。

祝你好运!

相关问题