sql - 用于测试非空字符串和非空字符串的兼容 SQL

标签 sql sql-server oracle

我希望 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

在两个服务器中,如果columnNULL,则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/

相关文章:

java - HPC + Oracle 连接 = 灾难的秘诀?

sql - 带有左连接的 Oracle 更新

javascript - Sequelize Model.hasOne 错误 : Model is not associated to ModelTwo

sql - 优化 SQL 查询

sql - Oracle中如何将行转换为列?

sql - t-sql, sql表内连接电子表格

sql - 使用 MOVE 确定 DB RESTORE 的 SQL 数据路径

sql-server - 如何从#temp 表生成插入数据脚本?

SQL Server 查询按订单查找所有产品的总价

Oracle:缺少右括号