那些年踩过的Oracle字符串的坑

运行环境:oracle11g、pl/sql developer
话不多说,上代码。

1、先建一个表

CREATE TABLE TEST_2019_10_17_ZL(A VARCHAR2(100),B VARCHAR(100));

2、往里面插点值

INSERT INTO TEST_2019_10_17_ZL VALUES ('11,12,13', '10');
COMMIT;

3、查看下值是否插进去了

SELECT * FROM TEST_2019_10_17_ZL;

那些年踩过的Oracle字符串的坑_第1张图片
成功插入
4、写一个pl/sql块

DECLARE
  WTF VARCHAR2(200);
BEGIN
  SELECT A INTO WTF FROM TEST_2019_10_17_ZL;
  
  /*判断字符串'11'能否被in函数识别,即'11' in('11,12,13') 返回值是真还是假*/
  IF '11' IN (WTF) THEN
    DBMS_OUTPUT.PUT_LINE('YES');
  ELSE
    DBMS_OUTPUT.PUT_LINE('NO');
  END IF;
  
  /*判断字符串'11,12,13'能否被in函数识别,即'11,12,13' in('11,12,13') 返回值是真还是假*/
  IF '11,12,13' IN (WTF) THEN
    DBMS_OUTPUT.PUT_LINE('YES');
  ELSE
    DBMS_OUTPUT.PUT_LINE('NO');
  END IF;
    /*判断字符串'11'能否被instr函数识别,即'11' instr('11,12,13') 返回值是真还是假*/
  IF INSTR(WTF, '11') <> 0 THEN
    DBMS_OUTPUT.PUT_LINE('YES');
  ELSE
    DBMS_OUTPUT.PUT_LINE('NO');
  END IF;
END;

最后输出截图如下

那些年踩过的Oracle字符串的坑_第2张图片
结论:通过这个小实验,我们看出,当字符串作为in函数的一个参数时,他是被视为一个整体的,即使像’A,B,C’这样作为参数传进来,也不会被in函数自动识别为’A’ ‘,’ ‘B’ ‘,’ ‘C’ 这样分开的字符。所以实验例子中的第一个判断是NO;若想将字符串分开,可以用instr和substr将他’切’开。

你可能感兴趣的:(oracle)