正如标题所说,我想找到一种方法,通过查询来检查我的哪些数据集从SYSDATE开始已经过去6个月了。
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
我已经尝试了以下方法,但它返回一个错误,说我的日期格式是错误的。然而,在插入数据时,我按照要求/意图使用了该日期格式,没有任何问题。
命令行的错误 : 10 列 : 25
块状引号
错误报告 -
SQL错误。ORA-01861: 字面意思与格式字符串不匹配 01861.00000 - "literal does not match format string"
*原因。 输入中的字词必须与格式字符串中的字词长度相同(除了格式字符串以外)。 原因:输入中的字元必须与格式字符串中的字元长度相同(前导空白除外)。 如果 "FX"修改器已被打开,字词必须完全匹配。 没有多余的空白。
*行动。 纠正格式字符串,使其与字面内容相匹配。
由于你的查询字符串是一个字面,并且假设你的日期被正确地存储为DATE
,你应该使用date literals。
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 "以 "日期格式 "存储时,这才有效。如果是 "Varchar",你应该对该列应用 "to_date() "函数,例如
SELECT * FROM OrderArchive
WHERE to_date(OrderDate,'yyyy-Mm-dd') <= to_date('2014-12-31','yyyy-MM-dd');