用于比较SQL Server和ORACLE中的日期的常用SQL

Cat*_*lMF 6 sql sql-server oracle

我需要在我的查询中包含一个日期比较,我将日期字符串与DATETIME列进行比较,但我需要它在ORACLE和SQL Server上工作,而不是有两个单独的查询.有没有可以在oracle和sql上运行的日期比较?

ORACLE:

Select * from MyTable where myDate > DATE '2013-04-10'
Run Code Online (Sandbox Code Playgroud)

SQL Server:

Select * from MyTable where myDate > convert(DATETIME,'2013-04-10', 126)
Run Code Online (Sandbox Code Playgroud)

Cad*_*oux 5

此可移植性问题仅适用于文字.

我不相信有一种完全可移植的方法,因为SQL Server不支持ANSI文字DATE关键字,并且所有平台上的所有CAST,CONVERT,TO_DATE和date函数都不相同.

请注意,您的第二个查询也可以写为Select * from MyTable where myDate > '20130410'.

如果在SQL Server中支持ANSI DATE文字功能(DB/2和Teradata都有这个功能),那就太好了.

我找不到这方面的连接项,也没有找到SQL Server不支持ANSI DATE,TIME和TIMESTAMP文字关键字的原因.

我想知道你的场景中是否可以使用参数?

Jack的注释中的解决方案Common SQL用于比较SQL Server和ORACLE中的日期将使此代码可移植,但您必须具有非可移植的标量函数.这对您来说可能是一个可行的选择 - 请注意,在SQL Server中,您需要为标量函数添加其模式前缀 - 如果您不能使模式具有相同的名称,这可能会在Oracle代码和SQL代码之间引入另一个问题(注意在Oracle中,如果将函数放在包中,前缀可以是包的名称而不是模式)