Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择不等于oracle中的空字符串的字段_Oracle - Fatal编程技术网

选择不等于oracle中的空字符串的字段

选择不等于oracle中的空字符串的字段,oracle,Oracle,我正在尝试编写一个查询,它只选择所有非空名称。以下两个查询均不返回任何结果: SELECT name FROM MyTable WHERE name != ''; SELECT name FROM MyTable WHERE name = ''; 对于上下文,这两个查询都会返回结果: SELECT name FROM MyTable WHERE name != 'a'; SELECT name FROM MyTable WHERE name IS NOT NULL; 我在某个地方

我正在尝试编写一个查询,它只选择所有非空名称。以下两个查询均不返回任何结果:

 SELECT name FROM MyTable WHERE name != '';

 SELECT name FROM MyTable WHERE name = '';
对于上下文,这两个查询都会返回结果:

 SELECT name FROM MyTable WHERE name != 'a';

 SELECT name FROM MyTable WHERE name IS NOT NULL;
我在某个地方读到空字符串在oracle中等同于NULL,但我仍然不明白为什么这可以解释这种行为。我需要同时支持SQL Server和Oracle,这就是为什么我不能只依赖名称不为NULL的

有人能解释一下这里发生了什么吗?谢谢

有人能解释一下这里发生了什么吗?谢谢

从档案中

长度为零的varchar被视为NULL

“”未被视为NULL

当分配给字符(1)时,“”变为“”(字符类型为空白填充字符串)

当分配给varchar2(1)时,“”将变为“”这是一个长度为零的字符串和一个长度为零的字符串
长度字符串在Oracle中为空(不再是“”)

任何涉及空值的比较都将返回FALSE。

嗨,朋友,这取决于列的类型。Oracle在varchar2 vs char列上的行为有点出乎意料。另一个问题有很多细节:我不知道你的应用程序和支持以及你是如何做到的,但这可能是和ORM的任务?很有意思的是,看看它是否有帮助。的可能重复项要同时支持SQL Server和Oracle,为什么不使用(名称!=''或名称不为null)?假设每个条件都支持一个数据库。@user2672165是正确的,尽管我可能会将顺序颠倒为where(name不是null或name“”)@mason本质上,当您在Varchar2列中插入长度为零的字符串时,它在Oracle中变为null。这违背了ANSI标准的规定,但Oracle一直在做他们自己的事情。
'
是零长度字符串吗?@mason是的,如果引号之间没有字符,那么它就是零长度字符串,但您在回答中说,
'
不被视为NULL,但零长度字符串是NULL。这是哪一个?@mason是文章中的剪切/粘贴工作,Oracle varchars中没有零长度字符串。您可以使用:声明一个VARCHAR(2);开始A:='';如果A='',那么dbms_output.put_行('Empty String');ELSE dbms_output.put_line('s NULL');如果结束;如果“=”,则dbms_output.put_行(“空字符串”);ELSE dbms_output.put_line('s NULL');如果结束;结束;我想这就是原因,谢谢。我还发现了这一点:“因为null表示缺少数据,所以null不能等于或不等于任何值或另一个null”,这解释了为什么name既不等于null,也不等于null。