精华内容
下载资源
问答
  • oracle 截取分隔

    2019-12-19 17:14:59
    select distinct (case\n" + " when a.safeguard_person like '%/%' then\n" + " regexp_substr(a.safeguard_person, '[^/]+...
    select distinct (case\n" +
                            "                  when a.safeguard_person like '%/%' then\n" +
                            "                   regexp_substr(a.safeguard_person, '[^/]+', 1, 2)\n" +
                            "                  else\n" +
                            "                   a.safeguard_person\n" +
                            "                end) as user_agentid\n" +
                            "  from T_OWS_ZB_PRODUCTLINE a\n" +
                            " where a.safeguard_id = ?

     

    展开全文
  • oracle截取字符串

    2019-09-30 19:53:59
    oracle查询结果中,有些结果太长,我们并不...那么我们就需要截取字符显示。 工具/原料 Oracle10g PL/SQL 一张带有时间字段的table 方法/步骤 安装Oracle10...

    在oracle查询结果中,有些结果太长,我们并不需要,例如时间:假如我们只需要年月日,而不需要时分秒,又或者我们只需要时和分。那么我们就需要截取字符显示。

    工具/原料

     
    • Oracle10g
    • PL/SQL
    • 一张带有时间字段的table

    方法/步骤

     
    1.  

      安装Oracle10g

    2.  

      安装PL/SQL

    3.  

      创建表空间及用户/导入已有数据库*.dmp文件,或新建一个数据库

    4.  

      用substr()函数查询!例如:

      select count(b.date_time),b.date_time from (select substr(a.send_time,0,8) as date_time,a.* --截取字符from ASSP_SEND_MESSAGE_2016  a where send_time like '201604%' ) b group by b.date_time;

      重点是susbstr(a.send_time,0,8),截取send_time字段,从第0位截取,截取长度为8个字符。

      oracle截取字符串

    转载于:https://www.cnblogs.com/muhy/p/11349942.html

    展开全文
  • #### Oracle 截取字符串(截取固定分隔符中间的字符) ######## oracle 取固定分隔符之间的字符--方法一 substr+ instrSELECT substr('12JPX#4806(JP)',instr('12JPX#4806(JP)','#')+1,(instr('12JPX#4806(JP)','('))-...

    #### Oracle 截取字符串(截取固定分隔符中间的字符) ####

    ####  oracle 取固定分隔符之间的字符
    --方法一 substr+ instr
    SELECT  substr('12JPX#4806(JP)',instr('12JPX#4806(JP)','#')+1,(instr('12JPX#4806(JP)','('))-(instr('12JPX#4806(JP)','#')+1) ) FROM dual
    结果 4806

    --方法二 正则表达式

    SELECT REGEXP_SUBSTR(REGEXP_SUBSTR('12JPX#4806(JP)','[^#]+',1,2,'i'),'[^(]+',1,1,'i')  FROM DUAL;
    结果   4806
    注意!!!! : 如果首个符号为第一个时,  

    #### 取字段包含A-Z的正则表达式用法

    select *  from gaa_file t  where regexp_like(t.gaa02,'^[A-Z]');


    #### 4GL 截取字符串(截取固定分隔符中间的字符) ####
    ####利用while循环取出一个包含多个'x'的字符串,最后一个'x'后面的字符 ####

    搞个while循环取出来
      WHILE TRUE
         IF guige.getIndexOf("x",1) THEN
            LET guige = guige.substring(guige.getIndexOf("x",1)+1, guige.getLength())
         ELSE
            EXIT WHILE
         END IF
      END WHILE


    #### 取得固定分隔符前面的字符串... ####

    方法一:
     LET len_str = length(str1)
            LET index1 = 0
            LET str_ret=str1
            WHILE index1<len_str
                LET index1=index1+1
                IF str1[index1,index1]=p_flag THEN
                    LET str_ret=str1[1,index-1]
                    EXIT WHILE
                END IF
            END WHILE

    方法二:
    FOR i=1 TO length(xxxx) STEP +1
       LET temp = xxx[1,i]
       IF temp LIKE '*/' THEN
           RETURN temp[1,i-1]
       END IF
    END FOR

    #### 4gl截取字符串进行判断  ####
       FOR li_i = pi_start TO pi_end
           LET ls_chk_chr = ps_source.getCharAt(li_i)
           IF ls_chk_chr NOT MATCHES "[0-9a-zA-Z]" THEN
              LET li_result = FALSE
              EXIT FOR
           END IF
       END FOR

    ####以固定符号取出字符串中的内容(这里以'&'作为范例)####

    DEFINE  l_tok       base.stringTokenizer      #080121
    DEFINE  l_str       LIKE type_file.chr1000
    DEFINE  l_str1      LIKE type_file.chr1000
        LET l_str ="abasf&asdfa&asfa"
        IF NOT cl_null(l_str) THEN
           LET l_tok = base.StringTokenizer.create(l_str,"&")
           WHILE l_tok.hasMoreTokens()
              LET l_str1 = l_tok.nextToken()
           END WHILE
        END IF

    ####以固定符号取出字符串中的内容(这里以'&'作为范例)####

    转载于:https://www.cnblogs.com/noneycn/p/9150763.html

    展开全文
  • 使用Oracle中Instr()和substr()函数: 在Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。 其语法为: instr(sourceString,destString,start,appearPosition). instr('源字符串'...

    使用Oracle中Instr()和substr()函数

    在Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。
    
    其语法为:
    instr(sourceString,destString,start,appearPosition).   instr('源字符串' , '目标字符串' ,'开始位置','第几次出现')
    其中sourceString代表源字符串;
    
    destString代表想聪源字符串中查找的子串;
    
    start代表查找的开始位置,该参数可选的,默认为1;
    
    appearPosition代表想从源字符中查找出第几次出现的destString,该参数也是可选的,默认为1;
    
    如果start的值为负数,那么代表从右往左进行查找,但是位置数据仍然从左向右计算。
    
    返回值为:查找到的字符串的位置。
    
    对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:
    SQL> select instr('yuechaotianyuechao','ao') position from dual;
    
     POSITION
     ----------
     6
    
    从第7个字符开始搜索
    SQL> select instr('yuechaotianyuechao','ao', 7) position from dual; POSITION ---------- 17 从第1个字符开始,搜索第2次出现子串的位置
    SQL> select instr('yuechaotianyuechao','ao', 1, 2) position from dual; POSITION ---------- 17

    -------------------------------------------------------------

    对于instr函数,我们经常这样使用:从一个字符串中查找指定子串的位置。例如:

    SQL> select instr('abcdefgh','de') position from dual;


    POSITION
    ----------
    4
    从1开始算 d排第四所以返回4

    SQL>select instr('abcdefghbc','bc',3) position from dual;

    POSITION
    ----------
    9
    从第3个字符开始算起 第3个字符是c,所以从3开始以后的字符串找查找bc,返回9

    ---------------------------
    从第1个字符开始,查找第2次出现子串的位置
    SQL> select instr('qinyinglianqin','qin', 1, 2) position from dual;
    POSITION
    ----------
    12

    ---------------------------------------------------------------------- 注意:1。若‘起始位置’=0 时返回结果为0, 2。这里只有三个参数,意思是查找第一个要查找字符的位置(因为 ‘第几次出现’默认为1), 当‘起始位置’不大于要查找的第一个字符的位置时,返回的值都将是第一个字符的位置,如果‘起始位置’大于要查找的第一个字符的位置时,返回的值都将是第2个字符的位置,依此类推……(但是也是以第一个字符开始计数)


    substr函数的用法,取得字符串中指定起始位置和长度的字符串 ,默认是从起始位置到结束的子串。 substr( string, start_position, [ length ] ) substr('目标字符串',开始位置,长度) 如: substr('This is a test', 6, 2) would return 'is' substr('This is a test', 6) would return 'is a test' substr('TechOnTheNet', -3, 3) would return 'Net' substr('TechOnTheNet', -6, 3) would return 'The'select substr('Thisisatest', -4, 2) value from dual


    SUBSTR()函数  
    1.用处:是从给定的字符表达式或备注字段中返回一个子字符串。   

    2.语法格式:SUBSTR(cExpression,nStartPosition [,nCharactersReturned])   

    其中,cExpression指定要从其中返回字符串的字符表达式或备注字段;

    nStartPosition用于指定返回的字符串在字符表达式或备注字段中的位置,

    nCharactersReturned用于指定返回的字符数目,缺省时返回字符表达式的值结束前的全部字符。  

    3.举例:STORE'abcdefghijlkm' To mystring   

    SUBSTR(mystring ,1,5) 显示 "abcde"  1 从第一个字符开始 截取的字符中,包括第一个字符 

    SUBSTR(mystring ,6) 显示 "fghijklm"   

    SUBSTR(mystring,-2)显示“km”   最右边一个字符是-1,最右边左边的字符是-2,然后默认是从左向有取剩下的全部的字符

    SUBSTR(mystrng,-4)显示“jlkm”

     

    oracle截取字符串
    
    将 C3411.907w15 截取点号之前的字符串 C3411    SUBSTR ('C3411.907w15',  0,  INSTR ('C3411.907w15, '.', 1, 1) - 1)  
    
    
    SELECT SUBSTR ('C3411.907w15', 0, INSTR ('C3411.907w15, '.', 1, 1) - 1)
    
      www.2cto.com  
    
      FROM DUAL
    
    
    将 C3411.907w15 截取点号之后 的字符串 907w15   SUBSTR ('C3411.907w15', INSTR ('C3411.907w15', '.', 1, 1)+1)
    
    
    SELECT SUBSTR ('C3411.907w15', INSTR ('C3411.907w15', '.', 1, 1)+1)
    
      FROM DUAL
    

     

    项目应用实例:

    原始字符串:

    原始字段中存在7个“_”,我现在只想取出最后一个“_”后面的字符串,该怎么解决呢?

    分两步:

    第一步,通过Instr()函数,找到第7个“_”字符:

    select instr('Q房网集团_经纪事业部_华南区_深圳世华_营业部_南山前海区_前海中心片区_前海五分店','_', 1, 7) fdisplayname from SHENZHENJM1222.B

    或者:

    select instr('Q房网集团_经纪事业部_华南区_深圳世华_营业部_南山前海区_前海中心片区_前海五分店', '_', -1, 1) fdisplayname FROM SHENZHENJM1222.B

    两者效果一样,下面的-1,表示从右边开始算起始字符,1表示获取第一个“_”

    获取到的结果如图:

     

    第2步,通过substr()函数,取出所需要的字段:

    select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B

    fdisplayname:代表字段名,相当于元字符串

    重点介绍一下+1

    +1表示在目标字符串“_”后的第一个字符串开始截取

    下面看一下不同的数字的情况:

     

    select substr(fdisplayname,instr(fdisplayname,'_',-1,1)+1) fdisplayname from SHENZHENJM1222.B

    在来看一下instr(fdisplayname,'_',-1,1)中的1是啥意思:

     

     

    Oracle中INSTR和SUBSTR的用法
    
    Oracle中INSTR的用法:
    INSTR方法的格式为
    INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号)
    返回找到的位置,如果找不到则返回0.
    例如:INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 在字符串中查找'OR',从第三个字符位置开始查找"OR",取第三个字后第2个匹配项的位置。
    
    默认查找顺序为从左到右。当起始位置为负数的时候,从右边开始查找。
    
    所以SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "aaa" FROM DUAL的显示结果是
    
    Instring
    ——————
    14
    
    
    oracle的substr函数的用法:
     取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] )
     如:
         substr('This is a test', 6, 2)     would return 'is'
         substr('This is a test', 6)     would return 'is a test'
         substr('TechOnTheNet', -3, 3)     would return 'Net'
         substr('TechOnTheNet', -6, 3)     would return 'The'
     
    select substr('Thisisatest', -4, 2) value from dual
    
    
    综合应用:
    SELECT INSTR('CORPORATE FLOOR', 'OR', -1, 1) "Instring" FROM DUAL
    --INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)
    SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) "Instring" FROM DUAL
    
    SELECT INSTR('32.8,63.5',',', 1, 1) "Instring" FROM DUAL
    
    SELECT SUBSTR('32.8,63.5',INSTR('32.8,63.5',',', 1, 1)+1) "INSTRING" FROM DUAL
    SELECT SUBSTR('32.8,63.5',1,INSTR('32.8,63.5',',', 1, 1)-1) "INSTRING" FROM DUAL
    
    -- CREATED ON 2008-9-26 BY ADMINISTRATOR
    DECLARE
      -- LOCAL VARIABLES HERE
      T   VARCHAR2(2000);
      S   VARCHAR2(2000);
      NUM INTEGER;
      I   INTEGER;
      POS INTEGER;
    BEGIN
      -- TEST STATEMENTS HERE
      T := '12.3,23.0;45.6,54.2;32.8,63.5;';
      SELECT LENGTH(T) - LENGTH(REPLACE(T, ';', '')) INTO NUM FROM DUAL;
      DBMS_OUTPUT.PUT_LINE('NUM:' || NUM);
      POS := 0;
      FOR I IN 1 .. NUM LOOP
        DBMS_OUTPUT.PUT_LINE('I:' || I);
        DBMS_OUTPUT.PUT_LINE('POS:' || POS);
        DBMS_OUTPUT.PUT_LINE('==:' || INSTR(T, ';', 1, I));
        DBMS_OUTPUT.PUT_LINE('INSTR:' || SUBSTR(T, POS + 1, INSTR(T, ';', 1, I) - 1));
        POS := INSTR(T, ';', 1, I);
      END LOOP;
    END;
    
    
    -- Created on 2008-9-26 by ADMINISTRATOR
    declare
      -- Local variables here
      i integer;
      T      VARCHAR2(2000);
      S      VARCHAR2(2000);
    begin
      -- Test statements here
        --历史状态
      T := '12.3,23.0;45.6,54.2;32.8,63.5;';
      IF (T IS NOT NULL) AND (LENGTH(T) > 0) THEN
        --T := T || ',';
        WHILE LENGTH(T) > 0 LOOP
          --ISTATUSID := 0;
          S         := TRIM(SUBSTR(T, 1, INSTR(T, ';') - 1));
          IF LENGTH(S) > 0 THEN
             DBMS_OUTPUT.PUT_LINE('LAT:'||SUBSTR('32.8,63.5',1,INSTR('32.8,63.5',',', 1, 1)-1));
             DBMS_OUTPUT.PUT_LINE('LON:'||SUBSTR('32.8,63.5',INSTR('32.8,63.5',',', 1, 1)+1));
            -- COMMIT;
          END IF;
          T := SUBSTR(T, INSTR(T, ';') + 1);
        END LOOP;
      END IF; 
    end;
    

     

    就是在表中有一个字段,最开始的是[XXXX]字样,我要如何操作,才能获得[]中字符?
    
    select substr('[xxxx]', instr('[xxxx]','[') + 1, instr('[xxxx]',']') - instr('[xxxx]','[') -1 ) from dual
    
    您的需要就是去掉[]而获得[]之间的字符对吧
    其实很简单,有一个截取字符的函数substr('string',n,m) 其中'string'是目标字符串,n为截取的起始位置,m为结束的位置。
    例如:select substr('[xxxx]' , 2, 4) from 表名;意思就是对[xxxx]从第二个位置开始截取4个字符。
    结果就是 xxxx 

    比如数据库有个字段为 tellsid,存储值的格式为
    "湖北_5874"  我想单独读取这个字段里下横线后面的部分并转换为数字  要怎么实现啊?
    后面数字部分是序列产生的, 前面部分是地区名,都没有固定的长度

    首先用instr检查'_'的位置,再substr就ok了。

    SELECT to_number(substr(tellsid,
                            instr(tellsid, '_', 1) + 1))
    FROM your_tablename;

    如果版本是10g以上,试试这个:
    SELECT to_number(regexp_substr(tellsid, '[0-9]{1,}', 1))
    FROM your_tablename;

    regexp_substr('fdaf_4556','[[:digit:]]+'),还是感觉这个好点。

     

    INSTR 
      (源字符串, 目标字符串, 起始位置, 匹配序号)
    
      在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始
    
      到字符的结尾就结束。
    
      语法如下:
    
      instr( string1, string2 [, start_position [, nth_appearance ] ] )
    
      参数分析:
    
      string1
    
      源字符串,要在此字符串中查找。
    
      string2
    
      要在string1中查找的字符串.
    
      start_position
    
      代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
    
      nth_appearance
    
      代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。
    
      注意:
    
      如果String2在String1中没有找到,instr函数返回0.
    
      示例:
    
      SELECT instr('syranmo','s') FROM dual; -- 返回 1
    
      SELECT instr('syranmo','ra') FROM dual;  -- 返回 3
    
      1 SELECT instr('syran mo','a',1,2) FROM dual;  -- 返回 0
    
      (根据条件,由于a只出现一次,第四个参数2,就是说第2次出现a的位置,显然第2次是没有再出现了,所以结果返回0。注意空格也算一个字符!)
    
      SELECT instr('syranmo','an',-1,1) FROM dual;  -- 返回 4
    
      (就算是由右到左数,索引的位置还是要看‘an’的左边第一个字母的位置,所以这里返回4)
    
      SELECT instr('abc','d') FROM dual;  -- 返回 0
    
      注:也可利用此函数来检查String1中是否包含String2,如果返回0表示不包含,否则表示包含。
    
      对于上面说到的,我们可以这样运用instr函数。请看下面示例:
    
      如果我有一份资料,上面都是一些员工的工号(字段:CODE),可是我现在要查询出他们的所有员工情况,例如名字,部门,职业等等,这里举例是两个员工,工号分别是’A10001′,’A10002′,其中假设staff是员工表,那正常的做法就如下:
    
      1 2 SELECT  code , name , dept, occupation FROM staff  WHERE code IN ('A10001','A10002');
    
      或者:
    
      SELECT  code , name , dept, occupation FROM staff  WHERE code = 'A10001' OR code = 'A10002';
    
      有时候员工比较多,我们对于那个’觉得比较麻烦,于是就想,可以一次性导出来么?这时候你就可以用instr函数,如下:
    
      SELECT  code , name , dept, occupation FROM staff  WHERE instr('A10001,A10002',code)>0;
    
      查询出来结果一样,这样前后只用到两次单引号,相对方便点。
    
      还有一个用法,如下:
    
      SELECT code, name, dept, occupation  FROM staff  WHERE instr(code, '001') > 0;
    
      等同于
    
      SELECT code, name, dept, occupation  FROM staff  WHERE code LIKE '%001%' ;



    instr(string1,string2[,start_position[,nth_appearence]])

    string1:要在此字符串中查找。

    string2:要在string1中查找的字符串。

    start_position:从string1开始查找的位置。可选,默认为1,正数时,从左到右检索,负数时,从右到左检索。

    nth_appearence:查找第几次出现string2。可选,默认为1,不能为负。

    注:如果没有查找到,返回0。

     例如:

    select instr('abcd','a') from dual;  --返回1 select instr('abcd','c') from dual;  --返回3 select instr('abcd','e') from dual;    --返回0

    该函数可以用于模糊查询以及判断包含关系:

    例如:

    ① select code, name, dept, occupation  from staff  where instr(code, '001') > 0;

      等同于

      select code, name, dept, occupation  from staff  where code like '%001%' ;

    ② select ccn,mas_loc from mas_loc where instr('FH,FHH,FHM',ccn)>0;

      等同于

      select ccn,mas_loc from mas_loc where ccn in ('FH','FHH','FHM');

     

     

    INSTR(源字符串, 目标字符串, 起始位置, 匹配序号) :
    在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,就是说从字符的开始到字符的结尾就结束。 
    
    一、语法如下: 
    instr( string1, string2 [, start_position [, nth_appearance ] ] ) 
    1>参数分析: 
      ①string1:源字符串,要在此字符串中查找。 
    
           ②string2:要在string1中查找的字符串. 
      ③start_position:代表string1 的哪个位置开始查找。
    
           注:此参数可选,如果省略默认为1. 字符串索引从1开始。
    
                  如果此参数为正,从左到右开始检索。
    
                  如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。 
    
      ④nth_appearance:代表要查找第几次出现的string2. 
    
           注:此参数可选,如果省略,默认为 1.如果为负数系统会报错。 
    注意:如果String2在String1中没有找到,instr函数返回0. 
    2>示例: 
      SELECT instr('syranmo','s') FROM dual; -- 返回 1 
      SELECT instr('syranmo','ra') FROM dual; -- 返回 3
      SELECT instr('syran mo','a',1,2) FROM dual; -- 返回 0 
      SELECT instr('syranmo','an',-1,1) FROM dual; -- 返回 4
      SELECT instr('abc','d') FROM dual; -- 返回 0 
    
    二、其他应用实例: 
    1>从staff表查询工号code分别是’A10001′,’A10002′的员工:
          ①SELECT code , name , dept, occupation FROM staff WHERE code IN ('A10001','A10002'); 
          ②SELECT code , name , dept, occupation FROM staff WHERE code = 'A10001' OR code = 'A10002'; 
          ③SELECT code , name , dept, occupation FROM staff WHERE instr('A10001,A10002',code)>0; 
           这种用法时常被用于存储过程,将范围字符串作为参数传入。如果使用①的SQL写法,将拼好的字符串传入直接使用,则存储过程会报错。此时会用这种方法查找,传入的拼好字符串便可直接使用。
    
    2>模糊查询:
      ①SELECT code, name, dept, occupation FROM staff WHERE code LIKE '%001%' ; 
    
           ②SELECT code, name, dept, occupation FROM staff WHERE instr(code, '001') > 0; 
    

     

     

    简述

    今天在写 sql时遇到一个情况,表 A中的 ID 是按照 TREE结构存储的。现在需要和表 B中的 NODE_ID连接,取出 B中 NODE_ID可以和 A中任意一个 level的 NODE_ID连接的信息。但是表 B中的 NODE_ID 具体对应到表 A中哪个 level是未知的。对此,最先想到使用的是 OR运算,但是由于效率太低,速度很慢,后来使用 INSTR代替,查询速度得到明显提高。

    表结构

    表 A - A_SEQ_ID, LVL1_NODE_ID, LVL2_NODE_ID, LVL3_NODE_ID, LVL4_NODE_ID, LVL5_NODE_ID, LVL6_NODE_ID, LVL7_NODE_ID, LVL8_NODE_ID, LVL9_NODE_ID, LVL10_NODE_ID
    表 B - B_SEQ_ID, NODE_ID, INFO

    开始时的 sql

    01. SELECT *
    02.   FROM A, B
    03. WHERE A.LVL1_NODE_ID = B.NODE_ID OR
    04.             A.LVL2_NODE_ID = B.NODE_ID OR
    05.             A.LVL3_NODE_ID = B.NODE_ID OR
    06.             A.LVL4_NODE_ID = B.NODE_ID OR
    07.             A.LVL5_NODE_ID = B.NODE_ID OR
    08.             A.LVL6_NODE_ID = B.NODE_ID OR
    09.             A.LVL7_NODE_ID = B.NODE_ID OR
    10.             A.LVL8_NODE_ID = B.NODE_ID OR
    11.             A.LVL9_NODE_ID = B.NODE_ID OR
    12.             A.LVL10_NODE_ID = B.NODE_ID;

     这条 sql虽然可以达到最终的目的,但是由于表 A和表 B的数据量比较大,所以执行起来相当慢。

    使用 Instr函数

    1. SELECT *
    2.   FROM A, B
    3. WHERE instr(
    4.                    (','||A.LVL1_NODE_ID||','||A.LVL2_NODE_ID||','||A.LVL3_NODE_ID||
    5.                     ','||A.LVL4_NODE_ID||','||A.LVL5_NODE_ID||','||A.LVL6_NODE_ID||
    6.                     ','||A.LVL7_NODE_ID||','||A.LVL8_NODE_ID||','||A.LVL9_NODE_ID||
    7.                     ','||A.LVL10_NODE_ID),
    8.                     ','||B.NODE_ID||',') > 0;

    比起 OR语句一个字段一个字段的比较,instr函数更加高效。当 instr函数匹配到子串的时候就会返回子串在源字符串中的位置,所以这里用 大于0 即表示在表 A的源字符串中可以找到表 B的 NODE_ID (子串或源字符串为 NULL时返回 NULL)。
    注:给每个字段加上逗号(',')的原因是匹配的一种方法,例如源数据是 1,2,3,13. 子串是 23.如果直接拼接的话,源字符串就变成 '12313',用instr('12313', '23') 明显可以匹配成功,但事实并非如此。所以换成给每个字符两边都加上逗号,不仅匹配字符也匹配其两边的逗号 - instr(',1,2,3,13,', '23')。

    Oracle Instr 函数

      Description of instr.gif follows  

    其中: INSTR   接受 characters格式的输入字符集,返回 characters格式的子串位置,位置索引从 1开始; INSTRB 使用 bytes 而非 characters; INSTRC 使用 Unicode complete characters; INSTR2 使用UCS2 code points; INSTR4 使用UCS4 code points。

    对于源字符串,除了INSTRC, INSTR2, 和 INSTR4 不允许CLOB 和 NCLOB 类型外,其他两个函数的源字符串接受CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB 或 NCLOB等任意数据类型。
    instr 语法如下: instr( string1, string2, start_position,nth_appearance )

     

    string1源字符串,要在此字符串中查找。
    string2要在string1中查找的字符串 。
    start_position代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。
    nth_appearance代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。

     

    注意:   如果String2在String1中没有找到,instr函数返回0。   示例:   SELECT instr('syranmo','s') FROM dual; -- 返回 1   SELECT instr('syranmo','ra') FROM dual; -- 返回 3   SELECT instr('syran mo','a',1,2) FROM dual; -- 返回 0

     

     

    oracle 截取字符(substr),检索字符位置(instr) case when then else end语句使用 收藏 
    常用函数:substr和instr
    1.SUBSTR(string,start_position,[length])    求子字符串,返回字符串
    解释:string 元字符串
           start_position   开始位置(从0开始)
           length 可选项,子字符串的个数
    For example:
    substr("ABCDEFG", 0); //返回:ABCDEFG,截取所有字符 
    substr("ABCDEFG", 2); //返回:CDEFG,截取从C开始之后所有字符 
    substr("ABCDEFG", 0, 3); //返回:ABC,截取从A开始3个字符 
    substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100虽然超出预处理的字符串最长度,但不会影响返回结果,系统按预处理字符串最大数量返回。 
    substr("ABCDEFG", -3); //返回:EFG,注意参数-3,为负值时表示从尾部开始算起,字符串排列位置不变。
    
    2.INSTR(string,subString,position,ocurrence)查找字符串位置
    解释:string:源字符串
          subString:要查找的子字符串
          position:查找的开始位置
          ocurrence:源字符串中第几次出现的子字符串
    For example:
    INSTR('CORPORATE FLOOR','OR', 3, 2)中,源字符串为'CORPORATE FLOOR', 目标字符串为'OR',起始位置为3,取第2个匹配项的位置;返回结果为 14 '
    

     

     

    oralce查询字符串截取
    select substr('XIHE@GXCOURT.GX',instr('XIHE@GXCOURT.GX','@')+1) from dual
    字段loginname='XIHE@GXCOURT.GX'截取@后面的内容不包括@


    sql :charindex('字符串',字段)>0 charindex('administrator',MUserID)>0


    oracle:instr(字段,'字符串',1,1) >0 instr(MUserID,'administrator',1,1)>0


    在项目中用到了Oracle中 Instr 这个函数,顺便仔细的再次学习了一下这个知识。

    Oracle中,可以使用 Instr
    函数对某个字符串进行判断,判断其是否含有指定的字符。

    其语法为:
    Instr(string, substring, position,
    occurrence)
    其中

    string:代表源字符串;

    substring:代表想聪源字符串中查找的子串;


    position:代表查找的开始位置,该参数可选的,默认为 1;


    occurrence:代表想从源字符中查找出第几次出现的substring,该参数也是可选的,默认为1;
    如果 position
    的值为负数,那么代表从右往左进行查找。
    返回值为:查找到的字符串的位置。

    对于 Instr
    函数,我们经常这样使用:从一个字符串中查找指定子串的位置。

    例如:

    SELECT Instr('Hello Word',
    'o', -1, 1) "String" FROM Dual 的显示结果是

    Instring
    ————
    8

     

     

     

     

            

    展开全文
  • where regexp_like(字段,'[A-Z]') where regexp_like(substr(str,0,1),'[A-Z]')
  • [b] 截取 订单,成本,运费 [/b] [code="sql"] select note,to_number(substr(regexp_substr(note,'[^,]+',1,1),9)),to_number(substr(regexp_substr(note,'[^,]+',1,2),5)), to_number(substr(regexp_...
  • Oracle SQL中实现indexOf和lastIndexOf功能,substr和instr用法 博客分类: oracle PL/SQL instrsubstrlastindexofindexoforacle . Oracle SQL中实现indexOf和lastIndexOf功能 Oracle, SQL, indexOf, ...
  • Oracle中可以使用instr函数对某个字符串进行判断,判断其是否含有指定的字符。 其语法为: instr(sourceString,destString,start,appearPosition). instr(‘源字符串’ , ‘目标字符串’ ,‘开始位置’,‘第几...
  • oracle 截取字符串substr(),REGEXP_SUBSTR()

    千次阅读 2014-07-11 11:09:37
    如果要截取 select t.EGEDD,substr(t.EGEDD,1,instr(t.EGEDD,'|')-1) sheng, substr(t.EGEDD,instr(t.EGEDD,'|')+1,instr(t.EGEDD,'|',1,2)-instr(t.EGEDD,'|')-1) shi, substr(t.EGEDD,instr(t.EGEDD,'|',1,2)+1...
  • select oplog from jqcase t WHERE T.JQTIME>='2016-03-14 00:00:00' and oplog like '%标志建筑=%' select jqno,jqtime,oplog,substr(oplog,(instr(oplog,'标志建筑=')),((instr(oplog,'[警情特征]')-(instr...
  • oracle截取clob类型

    2021-04-30 09:18:11
    --substr(字符串,截取开始位置,截取长度)=返回截取的字 select substr('miaoying',0,1) from dual;--返回结果为:m select substr('miaoying',1,1) from dual;--返回结果为:m--说明0和1都表示截取的位置为第一个...
  • //返回:CDEFG,截取从C开始之后所有字符 substr("ABCDEFG", 0, 3); //返回:ABC,截取从A开始3个字符 substr("ABCDEFG", 0, 100); //返回:ABCDEFG,100虽然超出预处理的字符串最长度,但不会影响返回结果,...
  • 负数倒着截取 v_dateform : = ' 20 ' ||v_tempStr||substr(l.USE_DATE,(instr( l.USE_DATE, ' / ' , 2 )- 1 )); RETURN to_char(v_dateform, ' yyyy/mm/dd ' ); ELSE IF REGEXP_LIKE(t.USE_DATE, ' \d{1,2}\...
  • 需求是表里的某个字段存储的值是以逗号分隔开来的,要求根据分隔的每一个值都能查出来数据,但是不能使用like查询。数据是这样的:sql;">select * from (select guid,regexp_substr(st_responsible,‘[^,]+‘,1,...
  • 工作中DBA经常会查看alert log来检查数据库后台都记录了些什么日志,如果只想看某一天或者某段时间范围的日志,能够把这些日志从大的alert log中截取下来放到一个单独的文件中,对于查看和下载都是很有意义的事,接...
  • 2.查看截取后的字段值 select SUBSTR(cb_id,3) from cust_info_v where cb_id like '01-%'; 3.更新数据表 UPDATE cust_info SET cb_id = REPLACE(cb_id, cb_id, SUBSTR(cb_id,4)) where cb_id like '01-%'; drop ...
  • oracle中的截取,模糊匹配小结

    千次阅读 2014-03-13 10:51:55
    截取: 1,去掉最后一个字符 >>>>>>>>>>>>>>>>substr截取 select substr('abcd',0,length('abcd')-1) from dual; 结果:abc substr的语法说明:substr('要截取的字段',开始位置,长度) >>>>>>>>>>>...
  • RTRIM()删除尾随空格 SOUNDEX()返回由四个字符组成的代码 (SOUNDEX) 以评估两个字符串的相似性 SOUNDS LIKE同SOUNDEX() SPACE()返回指定数目个空格的字符串 STRCMP()比较两个字符串 SUBSTRING_INDEX()返回在分隔符的...
  • oracle字符串截取函数

    2010-09-29 20:56:00
     IF REGEXP_LIKE(vString,'[[:print:]]') AND iNum >= 1 THEN BEGIN  iCurSeq := INSTR(vString,vSymbol,1,iNum); IF iNum=1 THEN BEGIN IF iCurSeq=0 THEN  vResult :=vString; ELSE  vResult :=SUBSTR(vString...
  • Oracle like运算符通常在数据量不高的情况下,用于where表达式中,搜索匹配字段中的指定内容,一般和 % 或 _ 结合使用。 如下查询user表中name字段含有 小白龙 的数据: SELECT * FROM user WHERE name LIKE '%...
  • Oracle字符串截取和大小写转换

    千次阅读 2015-03-31 11:15:23
     例如:update tableA set colA=substr(colA,instr(colA,'$')+1) where colA like '%$%'; 2、SQL中实现indexOf和lastIndexOf功能  INSTR的第三个参数为1时,实现的是indexOf功能。  INSTR的第三个
  • Oracle中对一个字段进行截取操作 例如数据为:AA;B;CCC;DDDD;E;F;120;ccc想取固定位置的120 需要使用到2个函数 substr字符截取函数 格式1: substr(string str,int a); 格式2:substr(string str, int a,int b)...
  • 1:update 表名 set 列名= SUBSTR(列名,INSTR(列名,'匹配字符',1,1)+1) where 条件 like '%*%' 2:select SUBSTR(列名,INSTR(列名,'、',1,1)+1) as d from 表名t where 条件like '%-%'; 例:Select INSTR(‘ORC+...
  • oracle中substr函数(截取字段)

    千次阅读 2019-08-15 09:08:32
    所使用函数:substr(string,start,length) ...length:要截取字符的长度,不写默认截取 到结束的字符 select hy.dh,substr(hy.dh,0,2),substr(hy.dh,1,2),substr(hy.dh,3),substr(hy.dh,3,5) from h...
  • ... 匹配语句:where coloumnvalue(列值) like 字符串  匹配常用方法:   1,字符串中有%表示另外还有零个及以上个字符   如:’%大剧院%’,表示查询该列值中含有’大剧院’的行;   
  • 模糊匹配 匹配语句:where coloumnvalue(列值) like 字符串 匹配常用方法: 1,字符串中有%表示另外还有零个及以上个字符 如:’%大剧院%’,表示查询该列值中含有’大剧院’的行; 如:’%大%美’,表示查询...
  • 截取字符串函数substr(字符串,截取开始位置,截取长度)  执行下面SQL: select substr(name,0,1) str from testTable; 可得到下面结果 5 .查找函数INSTR(string,subString,position,ocurrence)查找字符...
  • 1.substr():从给定的字符表达式...注:start_position:开始截取的字符串的位置。nChar返回的字符数目。如start_position为负,则表示从右开始第start_position开始进行截取。 如select substr('absdefg',1,3) sub f

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,344
精华内容 3,737
关键字:

likeoracle截取