繁体   English   中英

Oracle空字符串/ NULL

[英]Oracle empty string/NULL

我必须编写一个对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

谢谢,Marko

因为条件'' = ''仅在SQL-Server中为真(它相当于'' IS NOT NULL )并且条件'' IS NULL仅在Oracle中为真,您可以使用:

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)

您可以使用NULLIF() ,它在SQL ServerOracle中都可用(它是ANSI标准的一部分)。

select *
  from table
 where nullif(project, '') is not null

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

事实:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM