Plsql oralce日期筛选器未返回预期记录

Plsql oralce日期筛选器未返回预期记录,plsql,oracle11g,nsdateformatter,Plsql,Oracle11g,Nsdateformatter,我有一个oracle日期列,该列的特定记录的值为 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会返回所有日期为2005年10月16日的记录,而不考虑时间。 我是否也需要输入时间/从前端开始,我只获取日

我有一个oracle日期列,该列的特定记录的值为

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会返回所有日期为2005年10月16日的记录,而不考虑时间。
我是否也需要输入时间/从前端开始,我只获取日期而不获取时间。

将最后一个日期设置为第二天减去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')

将最后一个日期设置为第二天减去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')
将仅返回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日提取值为midnight的
date\u col

您还可以将
trunc
功能应用于您的
日期列

trunc(date_col) = date '2005-10-16'
但这将阻止使用
date\u col
上的标准索引。通常需要根据
trunc(date\u col)

将仅返回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日提取值为midnight的
date\u col

您还可以将
trunc
功能应用于您的
日期列

trunc(date_col) = date '2005-10-16'
但这将阻止使用
date\u col
上的标准索引。通常需要根据
trunc(date\u col)


是-你需要一个时间元素

截止日期('16-10-2005','DD-MM-YYYY')默认为午夜-因此,要检索05年10月16日的所有记录,您可以使用

date_col >= to_date('16-10-2005','DD-MM-YYYY')
and date_col < to_date('17-10-2005','DD-MM-YYYY')
date\u col>=截止日期('16-10-2005','DD-MM-YYYY'))
日期<截止日期('17-10-2005','DD-MM-YYYY')

是-您需要一个时间元素

截止日期('16-10-2005','DD-MM-YYYY')默认为午夜-因此,要检索05年10月16日的所有记录,您可以使用

date_col >= to_date('16-10-2005','DD-MM-YYYY')
and date_col < to_date('17-10-2005','DD-MM-YYYY')
date\u col>=截止日期('16-10-2005','DD-MM-YYYY'))
日期<截止日期('17-10-2005','DD-MM-YYYY')

这将包括日期为午夜的记录17th@FionaT我总是离开一个地方,那里有日期为午夜的唱片17th@FionaT我总是为多跑一英里而一丝不苟。很好。这在绝大多数情况下都适用,但如果您确实需要100%确保获得所有记录,oracle只存储了几分之一秒,因此您需要注意,除了(trunc)示例之外,所有示例都会在午夜前100秒排除记录。出于这个原因,我更喜欢>=和<方法,而且执行计划是相同的。@FionaT-Oracle不会在
日期
列中存储一秒钟的小数。它可能会将分数秒存储在
时间戳
列中,具体取决于该列的定义方式。一如既往,感谢您付出了额外的努力。很好。这在绝大多数情况下都适用,但如果您确实需要100%确保获得所有记录,oracle只存储了几分之一秒,因此您需要注意,除了(trunc)示例之外,所有示例都会在午夜前100秒排除记录。出于这个原因,我更喜欢>=和<方法,而且执行计划是相同的。@FionaT-Oracle不会在
日期
列中存储一秒钟的小数。它可以将小数秒存储在
时间戳
列中,具体取决于该列的定义方式。