我正在尝试使用nvl函数获取Oracle数据库中的记录,但没有返回任何记录。USER_ID列中当前没有空值。
查询:
问题1 :Select * from "Schemaname"."tablename" where nvl("USER_ID",'aaa') in('TestUser')
问题2:Select * from "schemaname"."tablename" where USER_ID in('TestUser')
使用NVL函数的查询1不返回任何记录,但查询2返回一条记录。有人能帮我找出查询1没有返回记录的原因吗?
发布于 2019-09-04 06:11:09
NVL允许您将查询结果中的null (作为空白返回)替换为字符串。如果expr1为null,则NVL返回expr2。如果expr1不为null,则NVL返回expr1。
更新
@Gordon Linoff是完全正确的,我的第一个建议是错误的-双引号只是DB实体的分界。但是它的价格比大多数人想象的要高。默认情况下,Oracle是不区分大小写的DBMS,但是当您开始使用双引号时,一切都改变了。查询之间唯一可疑的区别是第一个查询的"Schemaname“中有一个大写的"S”。
实际上,我们可以创建任意数量的相似对象,例如脚本
create table "abc_001" (
user_id varchar2(16)
);
create table "abC_001" (
user_id varchar2(16)
);
create table "AbC_001" (
user_id varchar2(16)
);将会成功完成,而且它涉及到DBMS的所有对象,所以现在我几乎可以肯定这封信中的问题。这些查询在语法上是正确的,但它们是对不同模式的请求。
所以我删除了我第一个答案中不正确的部分。
https://stackoverflow.com/questions/57779025
复制相似问题