我必须编写一条对 MS SQL Server 和 Oracle 有效的 SQL SELECT 语句。我必须使用旧的客户数据库,因此我无法更改数据库设计中的任何内容...
问题是该表有一个可为空的列“project”,它是一个 varchar,在某些情况下会填充空字符串 - 由 oracle 将其转换为 NULL。 那么如何选择所有具有非空“项目”的列?
WHERE project IS NOT NULL works for oracle
WHERE project <> '' works for MS
WHERE project IS NOT NULL AND project <> '' works for MS, but not for Oracle
谢谢, 马尔科
最佳答案
因为条件'' = ''
仅在SQL-Server中为真(它相当于'' IS NOT NULL
)并且条件' ' IS NULL
仅在 Oracle 中为 true,您可以使用:
WHERE ( project > '' AND '' = '') -- for SQL-Server
OR ( project IS NOT NULL AND '' IS NULL) -- for Oracle
请注意,如果您的值仅为空格,则 SQL-Server 和 Oracle 会以不同方式处理它们。测试 SQL-Fiddle-1 (Oracle) 和 SQL-Fiddle-2 (SQL-Server) 。
关于sql - Oracle 空字符串/NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20043247/