zoukankan      html  css  js  c++  java
  • ORACLE 不支持不等于空字符串( '')

    之前的应用一直是连接DB2数据库,DB2对空和空字符串的识别是不相等的,如:

    1.  
      -- FALSE
    2.  
      SELECT 1 FROM DUAL WHERE '' IS NULL;
    3.  
      -- TRUE
    4.  
      SELECT 1 FROM DUAL WHERE '' IS NOT NULL;
    5.  
      -- 注意:NULL 不能用 =、!=、<> 进行比较,只能用 IS、IS NOT 进行比较

    是没返回记录的,所以在写过滤空字段时要将空和空字符串都过滤掉,一般是这样写

    SELECT 1 FROM 表名 WHERE 字段名A IS NOT NULL AND 字段名A <> '';

    后面发现,其实一般在写“字段名A <> '某个值'”时,数据库就已经自动把空的数据过滤掉了,如:

    SELECT 1 FROM 表名 WHERE 字段名A <> '';

    就可以,所以后面过滤空字段时都这样写了。

    最近,有个点用的数据库是 ORACLE,而 ORACLE 对空和空字符串的识别是等同的,即 '' 等同于 NULL,这样以前写的

    SELECT 1 FROM 表名 WHERE 字段名A <> '';

    就相当于

    SELECT 1 FROM 表名 WHERE 字段名A <> NULL;

    而ORACLE 的 NULL 只能用 IS 或 IS NOT 进行比较,而不能用 = 、!= 、<> 进行比较,用 = 、!= 、<> 比较的结果都是返回 FALSE 的,所以导致数据一直查询不出来。

    总结:

    为了兼容 DB2 和 ORACLE,最后将SQL改成

    1.  
      -- 将不等于空字符串修改为不等于一个空格,也可以某个长度为 1 且该字段绝对不可能出现的任意值
    2.  
      SELECT 1 FROM 表名 WHERE 字段名A <> ' ';
    3.  
      -- 注意:
    4.  
      -- 正常可以写随便不等于某个值,但由于 DB2 对字段数据长度的严格要求,
    5.  
      -- 假设字段长度为 1 ,这时对比的查询条件长度为 2 (如:ab),这时查询就会报错
    6.  
      -- 假设“字段名B”长度为 1 ,则以下 SQL 在应用中进行查询会报错
    7.  
      SELECT 1 FROM 表名 WHERE 字段名B <> 'ab';
    8.  
      -- 而这样就不会报错了
    9.  
      SELECT 1 FROM 表名 WHERE 字段名B <> 'a';
  • 相关阅读:
    多态_python的小窝_百度空间
    可直接下载空间客户端
    简明 Python 教程 / 面向对象的编程 / 类与对象的方法
    C++ 基础 woaidongmao C++博客 good 量产
    set has enumerate
    python invoke super parent method
    分享:常用汉字的unicode 编码
    数据库调整也可以遵循“开闭原则”
    Ninject超轻量级的依赖注入工具
    点某个链接进网站,会发这个链接的会员加积分,实现方法(有时间限制)
  • 原文地址:https://www.cnblogs.com/xtjatswc/p/12859992.html
Copyright © 2011-2022 走看看