【发布时间】:2013-04-09 00:56:45
【问题描述】:
我需要在我的查询中包含一个日期比较,我将一个日期字符串与一个DATETIME 列进行比较,但我需要它同时在 ORACLE 和 SQL Server 上工作,并且没有两个单独的查询。
是否有适用于 oracle 和 sql 的日期比较?
甲骨文:
Select * from MyTable where myDate > DATE '2013-04-10'
SQL 服务器:
Select * from MyTable where myDate > convert(DATETIME,'2013-04-10', 126)
【问题讨论】:
-
@Aaron Bertrand 不,以上在 oracle 中不起作用。它错误地说它是一个无效的月份。
-
@CathalMF 即 Ed 提到的 depends on your NLS settings。
-
@EdGibbs 你听说过dba.se吗?我很确定你会在那里找到你喜欢的奇怪问题,我们有一个漂亮的broad definition of 'DBA',我可以告诉你很多关于 Oracle 的知识。
-
感谢 Aaron 的删除/重新发布建议;应该想到的!这里是:在 Oracle 中,任何字符串日期都使用 NLS_DATE_FORMAT 设置进行解析,该设置通常是 'DD-MON-RR'(2 位数的日期 #,月份名称缩写,2 位数的年份,带有世纪汇总),所以 WHERE myDate > '20130410' 将抛出
ORA-01861: literal does not match format string。如果你执行 `ALTER SESSION SET NLS_DATE_FORMAT = 'YYYYMMDD',你可以侥幸逃脱,但这可能会变得混乱。 -
@EdGibbs dba.SE 与备份、配置等传统 DBA 任务一样,涉及高级查询、语法和性能调整。
标签: sql sql-server oracle