我希望 Oracle 数据库和 Microsoft SQL Server 都有兼容的 SQL。
我想要一个兼容的 SQL 表达式,该表达式对于非 null 且非空字符串返回 true。
如果我使用:
column <> ''
它可以在 Microsoft SQL 服务器上运行,但不能在 Oracle 数据库上运行(因为对于 Oracle 来说 '' 为 null)
如果我使用:
len(column) > 0
它可以在 Microsoft SQL 服务器上运行,但不能在 Oracle 数据库上运行(因为它使用 length() )
最佳答案
NULLIF
在 Oracle ( doc ) 和 SQL Server ( doc ) 上均可用。这个表达式应该有效:
NULLIF(column, '') IS NOT NULL
在两个服务器中,如果column
为NULL
,则NULLIF
的输出将仅传递NULL
值(value)通过。在 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;
这是我在 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;
两者都按预期返回 3
。
关于sql - 用于测试非空字符串和非空字符串的兼容 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6457710/