use*_*826 46 sql oracle format date
正如标题所说,我想找到一种方法来检查我的哪些数据集是从SYSDATE通过查询过去6个月.
SELECT * FROM OrderArchive
WHERE OrderDate <= '31 Dec 2014';
Run Code Online (Sandbox Code Playgroud)
我尝试了以下但是它返回一个错误,说我的日期格式错误.但是,插入我使用该日期格式的数据按要求/预期并且没有问题.
命令行出错:10列:25
大段引用
错误报告 -
SQL错误:ORA-01861:文字与格式字符串01861不匹配.00000 - "文字与格式字符串不匹配"
*原因:输入中的文字必须与格式字符串中的文字长度相同(前导空格除外).如果已打开"FX"修饰符,则文字必须完全匹配,没有额外的空格.
*操作:更正格式字符串以匹配文字.
Syl*_*oux 57
由于您的查询字符串是文字,并且假设您的日期已正确存储,因为DATE您应该使用日期文字:
SELECT * FROM OrderArchive
WHERE OrderDate <= DATE '2015-12-31'
Run Code Online (Sandbox Code Playgroud)
如果你想使用TO_DATE(因为,例如,你的查询值不是文字),我建议你明确设置NLS_DATE_LANGUAGE参数,因为你使用美国缩写的月份名称.这样,它不会破坏某些本地化的Oracle安装:
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014', 'DD MON YYYY',
'NLS_DATE_LANGUAGE = American');
Run Code Online (Sandbox Code Playgroud)
Sac*_*chu 28
您需要使用该to_date()函数将字符串转换为日期
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31-Dec-2014','DD-MON-YYYY');
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('31 Dec 2014','DD MON YYYY');
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM OrderArchive
WHERE OrderDate <= to_date('2014-12-31','yyyy-MM-dd');
Run Code Online (Sandbox Code Playgroud)
这仅在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');
Run Code Online (Sandbox Code Playgroud)