Edu*_*rdo 22 sql sql-server oracle
我想为Oracle数据库和Microsoft SQL服务器提供兼容的SQL.
我想要一个兼容的SQL表达式,对于非null而不是空字符串将返回true.
如果我使用:
column <> ''
Run Code Online (Sandbox Code Playgroud)
它可以在Microsoft SQL服务器上运行,但不能在Oracle数据库上运行(因为''对于Oracle是空的)
如果我使用:
len(column) > 0
Run Code Online (Sandbox Code Playgroud)
它可以在Microsoft SQL服务器上运行,但不能在Oracle数据库上运行(因为它使用length())
Che*_*vel 39
NULLIF
可在Oracle(doc)和SQL Server(doc)上使用.这个表达式应该有效:
NULLIF(column, '') IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
在两个服务器中,如果column
是NULL
,那么输出NULLIF
将只传递NULL
值.在SQL Server上,'' = ''
输出NULLIF
将是NULL
.在Oracle上,''
已经是NULL
,所以它会通过.
这是我对SQL Server 2008 R2 Express的测试:
WITH SampleData AS
(SELECT 1 AS col1, NULL AS col2
UNION ALL
SELECT 2, ''
UNION ALL
SELECT 3, 'hello')
SELECT *
FROM SampleData
WHERE NULLIF(col2, '') IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
这是我在Oracle 10g XE上的测试用例:
WITH SampleData AS
(SELECT 1 AS col1, NULL AS col2 FROM DUAL
UNION ALL
SELECT 2, '' FROM DUAL
UNION ALL
SELECT 3, 'hello' FROM DUAL)
SELECT *
FROM SampleData
WHERE NULLIF(col2, '') IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
两者都3
按预期回归.
怎么样
CASE WHEN column = '' THEN NULL ELSE column END IS NOT NULL
Run Code Online (Sandbox Code Playgroud)