Oracle空字符串/ NULL

时间:2013-11-18 08:33:49

标签: sql sql-server oracle

我必须编写一个对MS SQL Server和Oracle有效的SQL SELECT语句。我必须使用旧的客户数据库,所以我不能改变数据库设计中的任何内容......

问题是该表有一个可为空的列'project',它是一个varchar,在某些情况下填充了一个空字符串 - 由oracle转换为NULL。 那么如何选择所有具有NON空“项目”的列?

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

谢谢, 马尔科

3 个答案:

答案 0 :(得分:7)

因为条件'' = ''仅在SQL-Server中为真(它等同于'' IS NOT NULL)且条件'' IS NULL仅在Oracle中为真,您可以使用:< / p>

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)

答案 1 :(得分:2)

您可以使用NULLIF()SQL Server中提供的select * from table where nullif(project, '') is not null (它是ANSI标准的一部分)。

NULLIF()

它的工作原理是因为Oracle将空字符串计算为NULL。值得注意的是,如果第一个表达式为NULL,Oracle不评估{{1}},但它确实以这种方式工作。

答案 2 :(得分:-2)

事实:

  • Oracle将空转换为NULL
  • SQL Server无法翻译。

因此,如果您的Oracle和SQL Server数据库具有相同的内容,结果是相同的,您真正想要的

where (project is not null OR project <> '')