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

    简直坑。

  • 相关阅读:
    JMeter压力测试入门教程[图文]
    从技术转管理的困惑
    APP纯黑盒测试—某些可以试试的操作
    测试网站访问速度的方法(GTmetrix)
    【转】web测试技术经典案例(基础、全面)
    【转】H5页面的测试点总结
    【转】测试思考之——思想有多远,你就能走多远
    【转】测试趋势之我的观点
    线程学习一
    继承log4.net的类
  • 原文地址:https://www.cnblogs.com/contixue/p/9077253.html
Copyright © 2011-2022 走看看