此可移植性问题仅适用于文字。
我不相信有一种完全可移植的方法来做到这一点,因为 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 中用于比较 SQL Server 和 ORACLE 中的日期的解决方案将使此代码可移植,但您必须具有不可移植的标量函数。这对您来说可能是一个可行的选择 - 请注意,在 SQL Server 中,您需要在标量函数前面加上其架构 - 如果您不能使架构同名,这可能会在 Oracle 代码和 SQL 代码之间引入另一个问题(注意在 Oracle 中,如果将函数放在包中,前缀可能是包的名称而不是模式)