例如,我有一个像这样的日期时间'2016-04-02 00:00:00'
,另一个像这样的'2016-04-02 15:10:00'
。我不在乎时间部分,我希望他们仅仅通过日期部分匹配。如何将Oracle DateTime转换为日期
我试过date()
,to_date
,datepart
,没有什么效果。
例如,我有一个像这样的日期时间'2016-04-02 00:00:00'
,另一个像这样的'2016-04-02 15:10:00'
。我不在乎时间部分,我希望他们仅仅通过日期部分匹配。如何将Oracle DateTime转换为日期
我试过date()
,to_date
,datepart
,没有什么效果。
截断日期到日期应该做的伎俩。文档浏览: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions201.htm
例如
SELECT TRUNC(SYSDATE, 'DAY') FROM DUAL;
做这样的:
where yourField >= the start of your date range
and yourField < the day after the end of your date range
编辑从这里开始:
虽然你可以使用trunc
,别人的建议请记住,对函数结果进行过滤通常会很慢。
正如其他人所说 - 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()。
祝你好运!
我很好奇..你为什么需要这样做?你想解决什么大问题? – Ditto
什么是你的日期?什么是你的约会?请举例或类似你的愿望目标 –
因为我有一个条件,必须与日期时间的日期匹配......但它不符合兼职时间。我希望你明白我的意思。 – servatj