2011-07-07 28 views
1

在Oracle中,列类型= DATE的表中有一列(dateColumn),当我执行select * from table.时,特定记录的值显示为'10/03/2010' 现在,当我这样做:Oracle查询不能正确显示日期

SELECT * 
    FROM table 
WHERE dateColumn < '01-JAN-11' 

什么也不显示。当我这样做时:

SELECT * 
    FROM table 
WHERE dateColumn > '01-JAN-11' 

记录显示出来。 这是为什么这样表现? “10/03/2010”是10日2010年3月,以便清楚,是2011 < 01一月

+0

我发现通过以下命令设置我想要的特定日期格式nls_date_format ='mm/dd/yyyy' – dave

回答

7

目前还没有确切的日期格式 - 它可以是按区域不同甚至业务。这甚至不考虑SQL现实...

在Oracle中,作为一个日期,需要您使用TO_DATE function评估字符串的方法:

SELECT * 
    FROM table 
WHERE dateColumn > TO_DATE('01-JAN-11', 'DD-MON-YY') 

您需要提供格式掩码指示Oracle如何解释你提供的日期。

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

+0

+1对于说教的回答 –

+0

谢谢。如果sql在函数内部,我们需要调用函数,将日期作为输入传递,但它不适用于我。所以我这样做:SELECT * FROM table WHERE dateColumn> TO_DATE(inputDate,'DD-MON-YY');我称之为传递输入日期。它给我的语法错误 – Victor

+2

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

1

尝试使用TO_DATE:

select * from table where dateColumn < to_date('01-JAN-11', 'dd-MON-YY') 
+1

将“mm”更改为“MON”,因为“mm”用于数字月份。 –