[英]Oracle SQL - DATE greater than statement
正如标题所说,我想找到一种方法来检查我的哪些数据集是从SYSDATE通过查询过去6个月。
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
我尝试了以下但是它返回一个错误,说我的日期格式错误。 但是,插入我使用该日期格式的数据按要求/预期并且没有问题。
命令行出错:10列:25
大段引用
错误报告 -
SQL错误:ORA-01861:文字与格式字符串01861不匹配.00000 - “文字与格式字符串不匹配”
*原因:输入中的文字必须与格式字符串中的文字长度相同(前导空格除外)。 如果已打开“FX”修饰符,则文字必须完全匹配,没有额外的空格。
*操作:更正格式字符串以匹配文字。
由于您的查询字符串是文字,并且假设您的日期正确存储为DATE
您应该使用日期文字 :
SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
如果您想使用TO_DATE
(因为,例如,您的查询值不是文字),我建议您使用美国缩写的月份名称显式设置NLS_DATE_LANGUAGE参数。 这样,它不会破坏某些本地化的Oracle安装:
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
'NLS_DATE_LANGUAGE = American');
您需要使用to_date()
函数将字符串转换为日期
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');
要么
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');
要么
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');
仅当OrderDate
以Date format
存储时,此方法才有效。 如果是Varchar
你应该在该列上应用to_date()
func
SELECT * FROM OrderArchive
WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');
你必须使用To_Date()函数将字符串转换为日期! http://www.techonthenet.com/oracle/functions/to_date.php
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.