Sql Oracle空字符串/NULL
我必须编写一个对MS SQL Server和Oracle有效的SQL SELECT语句。我必须使用旧的客户数据库,因此我无法更改数据库设计中的任何内容 问题是该表有一个可空的列“project”,它是一个varchar,在某些情况下填充了一个空字符串,oracle将其转换为NULL。 那么,如何选择具有非空“项目”的所有列Sql Oracle空字符串/NULL,sql,sql-server,oracle,Sql,Sql Server,Oracle,我必须编写一个对MS SQL Server和Oracle有效的SQL SELECT语句。我必须使用旧的客户数据库,因此我无法更改数据库设计中的任何内容 问题是该表有一个可空的列“project”,它是一个varchar,在某些情况下填充了一个空字符串,oracle将其转换为NULL。 那么,如何选择具有非空“项目”的所有列 WHERE project IS NOT NULL works for oracle WHERE project <> ''
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
项目不为NULL的地方适用于oracle
项目“”为MS工作的位置
其中项目不为NULL且项目“”适用于MS,但不适用于Oracle
谢谢,
Marko事实:
- Oracle将空转换为空
- SQL Server不翻译
where (project is not null OR project <> '')
其中(项目不为null或项目“”)
由于条件''=''
仅在SQL Server中为真(相当于''不为空
),且条件''为空
仅在Oracle中为真,因此可以使用以下方法:
WHERE ( project > '' AND '' = '') -- for SQL-Server
OR ( project IS NOT NULL AND '' IS NULL) -- for Oracle
请注意,如果您的值仅为空格,则SQL Server和Oracle将对它们进行不同的处理。测试和您可以使用NULLIF()
,它在和中都可用(它是ANSI标准的一部分)
这是因为Oracle将空字符串计算为NULL。值得注意的是,如果第一个表达式为NULL,Oracle不会计算
NULL(),但是,它确实是这样工作的。这将包含SQL Server中的空字符串。在Oracle中,空字符串被翻译为null,因此Oracle和SQL的结果与写StimeMeNT类似,编写一个在java和C++中都有效的代码语句。
select *
from table
where nullif(project, '') is not null