为什么我的日期字段的SQL查询有时需要trunc()(Oracle)?

Ger*_*ton 2 sql oracle datetime

我有两个表,我在每个表的日期列中查询.

在一种情况下,需要在日期字段上使用trunc()函数来获取值,而另一种情况则不需要.

这就是表1的工作原理:

SELECT to_char( datecol1 ,'mm/dd/yyyy hh:mm:ss') 
FROM table1 where datecol1    =to_date('10/07/2010', 'mm/dd/yyyy');
Run Code Online (Sandbox Code Playgroud)

但是在表2中,上面的语法不起作用,我需要trunc(),例如:

SELECT to_char( datecol2 ,'mm/dd/yyyy hh:mm:ss') 
FROM table2 where trunc(datecol2) =to_date('10/07/2010', 'mm/dd/yyyy');
Run Code Online (Sandbox Code Playgroud)

需要注意三点:

  1. 在使用to_char(datecol1,'mm/dd/yyyy hh:mm:ss')查询table1时,看起来好像所有时间都在12:00到12:10之间,但是全天都插入了值
  2. 当将记录插入table1时我只插入mm/dd/yyyy,没时间
  3. 在将记录插入table2时,我插入了时间

有人可以解释一下:

  • 为什么table1上不需要截断但是在table2上?
  • 为什么table1中的所有值都在12:00到12:10之间?

mar*_*ton 8

在表1中,您没有数据的"时间"组件,因此日期应该匹配 - 这是您观察到的.但是,您使用mm的是分钟部分时间的格式 - 但是mm月份,而不是分钟(mi).这就是为什么你看到12点以外的时间,以及为什么它们的范围大约只有12:10(你今年可能只有今年的数据?)

在表2中,由于您拥有数据的"时间"组件,因此需要将其截断以匹配仅限日期的值,这是to_date()函数返回的值,给定您使用的格式.

  • 关于mm与mi的良好关系 (2认同)
  • 在日期时间面​​具中使用MM代替MI是我们经历过的经典前额拍打时刻之一. (2认同)