gpt4 book ai didi

sql - Oracle NVL 问题

转载 作者:行者123 更新时间:2023-12-04 20:12:40 26 4
gpt4 key购买 nike

我试图在我的数据库中传递一个空值作为其他东西,它似乎在没有这样的 Where 子句的情况下工作

select NVL(column1, '0') column1 from table1

产生这个

    0   test1
0 test2
1 test3

但是当我像这样添加 where 子句时

select NVL(column1, '0') column1 from table1 where column1 <=1

它产生这个

    1   test3

但是现在,如果我将以下内容添加到查询中,它就可以工作了

select NVL(column1, '0') column1 
from table1
where NVL(column1, '0') <=1

但是要使用 Where 子句正确显示值似乎还有很长的路要走

知道我做错了什么吗?

提前致谢

最佳答案

您不能从 WHERE 子句引用 SELECT 列表中定义的别名。因此,如果您在 SELECT 列表中应用 NVL 函数,则需要在 WHERE 子句中调用相同的函数(就像您已经已演示)或者您需要在内联 View 中应用该函数

SELECT column1
FROM (SELECT nvl(column1, 0) column1
FROM table1)
WHERE column1 <= 1

请注意,如果 COLUMN1 是一个 NUMBER,则 NVL 的第二个参数也应该是一个 NUMBER。否则,您将进行隐式转换,并且您的比较操作最终可能会使用字符串比较语义而不是数字比较语义。由于字符串“12”小于字符串“2”,这可能会导致意外结果。

关于sql - Oracle NVL 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7405911/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com