我有一个oracle DATE列,该列的特定记录的值是
16/10/2005 11:13:34 AM.
现在我正在安装一个这样的过滤器,过滤器字符串从前端传入。
date_col between to_date('16-10-2005','DD-MM-YYYY') and to_date('16-10-2005','DD-MM-YYYY')
它返回零记录。为什么会这样?我想oracle将返回所有日期为16/10/2005的记录,无论时间如何。 我是否也需要及时通过/从前端,我只得到日期,而不是时间。
答案 0 :(得分:2)
date_col between to_date('16-10-2005','DD-MM-YYYY')
and to_date('16-10-2005','DD-MM-YYYY')
仅返回2005年10月16日午夜的DATE
值。如果您想在2005年10月16日的任何时间获取数据
date_col between to_date('16-10-2005','DD-MM-YYYY')
and to_date('16-10-2005 23:59:59','DD-MM-YYYY HH24:MI:SS')
会做到的。
date_col between to_date('16-10-2005','DD-MM-YYYY')
and to_date('17-10-2005','DD-MM-YYYY') - interval '1' second
如果你没有减去那一秒,你也最终会在2005年10月17日拉出date_col
午夜价值的行。
您还可以将trunc
功能应用于date_col
trunc(date_col) = date '2005-10-16'
但这会阻止使用date_col
上的标准索引。您通常需要在trunc(date_col)
CREATE INDEX idx_trunc_date_col
ON table_name( trunc(date_col) );
答案 1 :(得分:2)
是的 - 你需要一个时间元素。
to_date('16 -10-2005','DD-MM-YYYY')默认为午夜 - 所以要检索16/10/05的所有记录,你可以使用
date_col >= to_date('16-10-2005','DD-MM-YYYY')
and date_col < to_date('17-10-2005','DD-MM-YYYY')
答案 2 :(得分:1)
将第二天的最后日期减去1秒......
date_col between to_date('16-10-2005','DD-MM-YYYY')
and to_date('16-10-2005 23:59:59','DD-MM-YYYY HH:MI:SS')