NVL列和NULL

时间:2016-11-14 09:39:17

标签: sql oracle11g

我有如下所示的行

ProductId   ProductName      ProductDesc      ProductLoc
101         Camel             Pencil           B-10
102         Parker            Pen              
103         Mirado            Pen              C-10

当我执行以下SQL查询时

SELECT *
  FROM tablename
 WHERE productloc = NVL ('', productloc)

它给了我第1行和第3行,我想要实现的是如果productloc在SQL的where条件中为null,那么我应该得到所有三行。

如何获得所需的输出。

4 个答案:

答案 0 :(得分:1)

尝试类似:

_pattern = @"[]!@#$%^&*()_+={}[\\|?/.><,~`]{" + minimChar + ",}";
           ^  ^                ^^

这里zzz是一些虚拟值,否则不应该在特定列中作为值存在。

答案 1 :(得分:1)

我想有三种不同的解决方案:

如果您想要所有行(productloc为null且值为),您可以编写以下查询:

SELECT *
FROM tablename

没有WHERE子句。

如果要提取所有productloc的行具有指定值或为null,则可以编写以下查询:

SELECT *
FROM tablename
WHERE productloc IS NULL OR productloc = YOURVARIABLE

或(最后,不使用OR条件)

SELECT *
FROM tablename
WHERE NVL(productloc, YOURVARIABLE) = YOURVARIABLE

答案 2 :(得分:1)

select * from tablename;

在这种情况下你需要的是因为你的位置没有效果。您将列与自身进行比较。

如果你想过滤并包含空值,你可以做(​​但可能用一些值替换一个productloc

select * from tablename where productloc = productloc or productloc is null;

或者:

select * from tablename where nvl(productloc, 'SOME_UNIQUE_VAL') = nvl(productloc, 'SOME_UNIQUE_VAL');

并将productloc中的一个替换为某个值。

答案 3 :(得分:1)

我假设您使用的是Oracle。在Oracle中,“NULL”不是值,因此任何比较函数都将返回false。

我建议:

SELECT *  
  FROM tablename  
 WHERE (productloc = productloc OR productloc IS NULL)  

希望它有所帮助,
塞尔吉奥