Sql NVL列和NULL
我有如下所示的行Sql NVL列和NULL,sql,oracle11g,Sql,Oracle11g,我有如下所示的行 ProductId ProductName ProductDesc ProductLoc 101 Camel Pencil B-10 102 Parker Pen 103 Mirado Pen C-10 当我执行以下SQL查询时 SELECT * FROM ta
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,那个么我应该得到所有三行
如何获得所需的输出。尝试以下方法:
SELECT *
FROM tablename
WHERE nvl(productloc,'zzz') = (case when productloc is null then 'zzz' else productloc end )
这里zzz是一些虚拟值,否则不应作为值出现在特定列中。我假设有三种不同的解决方案: 如果需要所有行(带
productloc
null和值),可以编写以下查询:
SELECT *
FROM tablename
SELECT *
FROM tablename
WHERE productloc IS NULL OR productloc = YOURVARIABLE
没有WHERE
子句
如果要使用productloc
提取所有具有指定值或为空的行,则可以编写以下查询:
SELECT *
FROM tablename
SELECT *
FROM tablename
WHERE productloc IS NULL OR productloc = YOURVARIABLE
或(最后一个,不使用或条件)
从tablename中选择*代码>
在这种情况下是你需要的,因为你的where不起作用。您可以将列与自身进行比较
如果您想过滤并包含空值,您可以这样做(但可能会用一些值替换一个productloc
:
从表名中选择*,其中productloc=productloc或productloc为空;
或:
select*from tablename,其中nvl(productloc,'SOME_UNIQUE_VAL')=nvl(productloc,'SOME_UNIQUE_VAL');
还可以将productloc
中的一个替换为某个值。我假设您使用的是Oracle。在Oracle中,“NULL”不是一个值,因此任何比较函数都将返回false
我建议:
SELECT *
FROM tablename
WHERE (productloc = productloc OR productloc IS NULL)
希望有帮助,
Sérgiohmm..productloc与productloc在同一个表中进行比较..为什么?如果删除where语句,将得到所有行..两边保留nvl。nvl('',productloc)
始终返回productloc
,因为在Oracle中'
等于null
,请共享预期的最终结果。如果val为null,如果val不为null。。