zoukankan      html  css  js  c++  java
  • oracle10g中判断字段是否为空的坑

    RT,在oracle中,写SQL时,假设这个字段为STA Char(3),判断这个字段是否为空一般都是这两个:STA = '' or STA is null 

    但是今天这两种方法失效了,无论是STA = '' 还是STA is null 都无法查询到那笔记录。到数据库一看,该字段的确为空,但是由于这个字段是CHAR类型的,所以多了3个空格。

    既然有空格那么用:trim(STA) = '' 这个条件能查到吗?还是不行。没办法了,那么只能用:STA = ' '(注意中间有个空格) 这个条件能查了,果然能查到。

    猜测可能是因为STA字段是Char字段的原因(Char类型在插入的时候如果插入空或者长度不足,会自动添加空格补齐长度)),由于有空格导致需要用 STA = ' ' 来查询,但我又找了一个Varchar2 类型的字段(Varchar2类型的字段在保存的时候不会自动补齐长度), NAME Varchar2(32),这个空字段就没有空格了,然后使用:NAME = '' or NAME is null  or trim(NAME ) = ''

    还是查不到,还是得用 NAME  = ‘ ’(注意中间有个空格)来查询。

    我的数据库版本是:10.0.2 在11g也没有遇见过这种情况,想来是oracle10g的BUG,希望大家在判断字段是否为空的时候使用这种形式:STA = '' or STA is null  or trim(STA ) = '' or STA  = ' '

    避免无法判断的情况。

    PS:还有后续,我后面使用for update 把这个STA字段清空了,然后使用:STA = '' or STA = ' ' 又不能查询到这笔记录了,还得使用:STA is null 才行。

    简直坑。

  • 相关阅读:
    Day 50
    Spring Boot logging 配置及相关属性
    spring boot的项目名称问题
    spring boot的项目结构问题
    @RestController无法自动注入的问题
    mysql的模糊查询
    写点什么来为自己的过去和未来画个分隔符
    python学习随笔day2
    python学习随笔day1
    linux文件上传和下载
  • 原文地址:https://www.cnblogs.com/contixue/p/9077253.html
Copyright © 2011-2022 走看看