空串的问题。很简单,但我搞不明白。

pufan 2004-08-03 06:50:37
当我向数据库中已有字段update空串后,发现无法用 该字段='' 的where表达式查询出数据,而用 该字段 is null 的表达式能查出数据。
这很不符合正常的逻辑:既然能让我update空串了,你就应该让我用空串将数据查回来,否则 字段='' 的这种表达式有什么存在的意义?谁来给我解惑。
...全文
197 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ineedtostudy 2004-08-03
  • 打赏
  • 举报
回复
null 除了'is null'操作外,其他任何操作返回的值都是null,既然where字句的条件是null,那么就不会返回任何数据了
CodeMagic 2004-08-03
  • 打赏
  • 举报
回复
null表示不确定的值,当两个不确定的值比较的时候,你不能就认为它们一定相等(即表示相同的值)
pufan 2004-08-03
  • 打赏
  • 举报
回复
古怪啊,null=null不能返回真,这又是为啥那?
beckhambobo 2004-08-03
  • 打赏
  • 举报
回复
SQL> select 1 from dual where null=null;

1
----------

SQL> select 1 from dual where 1=1;

1
----------
1

很明显,oracle当字段为null时,强行与其它值相关联时,不会被选出来.
CodeMagic 2004-08-03
  • 打赏
  • 举报
回复
->insert into test values('1');

已创建 1 行。

->commit;

提交完成。

->select * from test;

NAME
__________
1

已选择 1 行。

->update test set name='';

已更新 1 行。

->commit;

提交完成。

->select * from test;

NAME
__________


已选择 1 行。

->select * from test where name='';

未选定行

->select * from test where name is null;

NAME
__________


已选择 1 行。


理由很简单,既然''认为是null,name的值也是null,判断null=null不能返回真,只能用is null
pufan 2004-08-03
  • 打赏
  • 举报
回复
CodeMagic 写道:
在oracle中把空串认为是null,不是''
-------------------
我是不明白Oracle这样设计的原因,既然你都可以把''自动转换为null储存了,
你为什么又不能用 ='' 这样的表达式来查询呢。
我一直是这样认为,你存进什么数据进去,你就当然可以用=表达式将该数据查出来。如果只是针对''这种特殊例子需要特殊对待的话,那 ='' 的这种表达式又有什么存在的意义?
CodeMagic 2004-08-03
  • 打赏
  • 举报
回复
在oracle中把空串认为是null,不是''

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧