Oracle中的空字符串与instr

转载:这里写链接内容

1:当字段!=NULL

在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始到字符的结尾就结束

SELECT code, name, dept, occupation FROM staff WHERE instr(code, '001') > 0; 
  等同于 
SELECT code, name, dept, occupation FROM staff WHERE code LIKE '%001%' ; 
2: 判断字段 ==null or ’ ‘

一个decode的SQL语句老是筛不出想要的数据,应该是判断的字段包括了NULL,instr无法对其行使正常的查找。Oracle中的instr,在被查找的字符串中找得到要查找的字符串,就返回其所在的位置数值,找不到就返回0,而如果被查找的字符串是NULL,就返回不了任何东西。
  因此要对NULL先行处理,使用nvl,将NULL转换成其它数据,但是不能转换成空字符串(如nvl(data,”),否则instr还是用不了,虽然空字符串已经是字符型,但它没有长度(不信用length试试),其中上Oracle把它默认为NULL,虽然它实际上不能算NULL,可是用instr去搜索字符串,得到的还是空,不是0,也不是其它数值,还是不能发挥查找的功能。所以只能用nvl把NULL处理成一个空格,nvl(data,’ ‘),这样才能正常使用instr。”和’ ‘是不一样的,虽然都是字符型,但后者有一个空格在单引号里,就不是空值,它的长度就是1。

    SELECT
                o.ORDER_SEQ orderSeq,v.VIN vin, o.ORDER_STATUS,instr(nvl(o.MISC,' '), getJobNumber('3534963010'))
            FROM 
                ORDER_INFO o
            INNER JOIN   
                VEHICLE_INFO v
            ON 
                o.VIN=v.VIN
            LEFT JOIN 
                STAFF_INFO  s
            ON
                o.JOB_NUMBER != s.JOB_NUMBER AND  instr(nvl(o.MISC,' '), getJobNumber('3534963010')) = 0
            where TO_CHAR(SYSDATE , 'YYYYMMDDHH24MI') > o.PLAN_PICKUPTIME
                --AND o.REAL_PICKUPTIME IS NOT NULL 

  ps:

  这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值