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

时间:2013-04-16 14:45:27

标签: sql sql-server oracle

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

ORACLE:

Select * from MyTable where myDate > DATE '2013-04-10'

SQL Server:

Select * from MyTable where myDate > convert(DATETIME,'2013-04-10', 126)

2 个答案:

答案 0 :(得分:5)

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

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

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

如果在SQL Server中支持ANSI DATE文字功能(DB / 2和Teradata都有此功能),那将是很好的。

我在这上找不到Connect项,也没有找到SQL Server不支持ANSI DATE,TIME和TIMESTAMP文字关键字的原因。

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

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

答案 1 :(得分:1)

是否允许定义您自己的用户定义函数?您可以创建一个抽象DBMS特定代码并返回文字“True”或“False”结果的函数。

[MSSQL用户定义函数:] http://msdn.microsoft.com/en-ca/library/ms186755.aspx

[Oracle用户定义函数] http://ocs.oracle.com/cd/B19306_01/server.102/b14200

Oracle显然不允许用户定义的函数返回布尔类型,因此需要字符串(或数字)结果。