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 才行。

    简直坑。

  • 相关阅读:
    暑期总结1
    python +request 之数据库断言
    django接口开发之restful风格
    python +unittest 测试报告的生成
    Django学习笔记七----操作models修改数据库表结构
    Django学习笔记七----操作models,对数据库进行操作
    django学习六--操作model创建数据库表
    appium+python app自动化
    django学习五----redirect和,HttpResponsePermanentRedirect重定向
    html action属性
  • 原文地址:https://www.cnblogs.com/contixue/p/9077253.html
Copyright © 2011-2022 走看看