sql - Oracle 空字符串/NULL

标签 sql sql-server oracle

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

相关文章:

sql - 如何从数据库表中选择 4 个大小相等的结果集

sql-server - 阻止 SQL Server Management Studio 向存储过程添加注释

java - Oracle 驱动程序可能不在使用任务 "gradle jar"的类路径中

mysql - SQL 加入与日期相关的数据

sql - T-SQL 语句中前缀 N 的含义是什么以及何时应该使用它?

sql-server - 我可以在所有数据库上打开服务代理吗?

sql - 如何将具有多个值的列加载到表中的单独行中

sql - Oracle将秒数转换为小时:分钟:秒

sql-server - 设计数据库时,存储多个真/假值的首选方式是什么?

c# - 将图像存储在我的表的图像列中