繁体   English   中英

Oracle SQL - DATE大于语句

[英]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');

仅当OrderDateDate 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM