Oracle查询未正确显示日期

Vic*_*tor 1 sql oracle oracle9i

在Oracle中,列类型为= DATE的表中有一个列(dateColumn)select * from table. ,当我执行以下操作时,特定记录的值显示为'10/03/2010' :

SELECT * 
  FROM table 
 WHERE dateColumn < '01-JAN-11'
Run Code Online (Sandbox Code Playgroud)

什么都没有出现.当我做:

SELECT * 
  FROM table 
 WHERE dateColumn > '01-JAN-11'
Run Code Online (Sandbox Code Playgroud)

记录出现了.为什么这样做?"2010年10月10日"是第10届MArch 2010,所以显然是<2011年1月1日.

OMG*_*ies 7

没有明确的日期格式 - 它可能因地区甚至商业而异.即使没有考虑SQL,这也是现实......

在Oracle中,将字符串作为日期进行评估的方法要求您使用TO_DATE函数:

SELECT * 
  FROM table 
 WHERE dateColumn > TO_DATE('01-JAN-11', 'DD-MON-YY')
Run Code Online (Sandbox Code Playgroud)

您需要提供格式掩码以指示Oracle如何解释您提供它的日期.

该功能在其他数据库上通常是不同的,但其他方面的体验是相同的.大多数数据库接受'YYYY-MM-DD'用于将字符串隐式转换为日期.显式转换是指您使用函数时,比如TO_DATE显式更改数据类型.

  • @Kaushik:参数`inputDate`的数据类型是什么?我打赌它是'DATE`,这不是你问的问题.我永远不会明白为什么人们认为隐藏细节是个好主意...... (2认同)