在Oracle中,列类型为= DATE的表中有一列(dateColumn),当我执行select * from table.
时,特定记录的值显示为'10 / 03/2010'
现在,当我这样做时:
SELECT *
FROM table
WHERE dateColumn < '01-JAN-11'
什么都没有出现。当我这样做时:
SELECT *
FROM table
WHERE dateColumn > '01-JAN-11'
记录显示出来。 为什么这样做? “2010年10月10日”是第10届MArch 2010,所以很明显是&lt; 2011年1月1日。
答案 0 :(得分: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
)来显式更改数据类型。
答案 1 :(得分:1)
尝试使用to_date:
select * from table where dateColumn < to_date('01-JAN-11', 'dd-MON-YY')