Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 个案情况及;oracle中的Instring函数_Sql_Oracle_Oracle11g_Oracle10g_Oracle Sqldeveloper - Fatal编程技术网

Sql 个案情况及;oracle中的Instring函数

Sql 个案情况及;oracle中的Instring函数,sql,oracle,oracle11g,oracle10g,oracle-sqldeveloper,Sql,Oracle,Oracle11g,Oracle10g,Oracle Sqldeveloper,我的oracle数据库中有一个表,其中varchar2列为“Detail_Number”,记录如下所示- Detail_Number -------------- P1464187 1-17J3P VAR1460621 P15000566 VRH-P146310034 RH-73082_SS1 19502744 现在,我想使用一个case语句,它只返回Detail_Number列中特殊字符“_”前面的部分,以防出现特殊字符。否则,请把详细的号码还给我 我写的案例陈述是- CASE WHEN

我的oracle数据库中有一个表,其中varchar2列为“Detail_Number”,记录如下所示-

Detail_Number
--------------
P1464187
1-17J3P
VAR1460621
P15000566
VRH-P146310034
RH-73082_SS1
19502744
现在,我想使用一个case语句,它只返回Detail_Number列中特殊字符“_”前面的部分,以防出现特殊字符。否则,请把详细的号码还给我

我写的案例陈述是-

CASE
  WHEN INSTR(A.AGREEMENT_NUMBER, '_') IS NOT NULL THEN SUBSTR(A.AGREEMENT_NUMBER, 0, INSTR(A.AGREEMENT_NUMBER, '_')-1)
  WHEN INSTR(A.AGREEMENT_NUMBER, '_') = 0 THEN A.AGREEMENT_NUMBER
  --ELSE A.AGREEMENT_NUMBER
END AS Output  
查询结果如下所示-

Detail_Number   Output
-------------   --------
P1464187    
1-17J3P 
VAR1460621  
P15000566   
VRH-P146310034  
RH-73082_SS1    RH-73082
19502744    
在这里,我得到了跳过“u”后的部分。但是,如果“\u1”不存在,它将返回null。你能帮我做同样的事情吗

谢谢。

你是说这个吗

SQL> with
  2    data as (select 'P1464187' t# from dual union all
  3             select '1-17J3P' t# from dual union all
  4             select 'VAR1460621' t# from dual union all
  5             select 'P15000566' t# from dual union all
  6             select 'VRH-P146310034' t# from dual union all
  7             select 'RH-73082_SS1' t# from dual union all
  8             select '19502744' t# from dual)
  9  select
 10    substr(t#, 1, instr(t# || '_', '_') - 1)
 11  from
 12    data;

SUBSTR(T#,1,INSTR(T#||'_','_')-1)
--------------------------------------------------------
P1464187
1-17J3P
VAR1460621
P15000566
VRH-P146310034
RH-73082
19502744

7 rows selected.
你是说这个吗

SQL> with
  2    data as (select 'P1464187' t# from dual union all
  3             select '1-17J3P' t# from dual union all
  4             select 'VAR1460621' t# from dual union all
  5             select 'P15000566' t# from dual union all
  6             select 'VRH-P146310034' t# from dual union all
  7             select 'RH-73082_SS1' t# from dual union all
  8             select '19502744' t# from dual)
  9  select
 10    substr(t#, 1, instr(t# || '_', '_') - 1)
 11  from
 12    data;

SUBSTR(T#,1,INSTR(T#||'_','_')-1)
--------------------------------------------------------
P1464187
1-17J3P
VAR1460621
P15000566
VRH-P146310034
RH-73082
19502744

7 rows selected.

使用REGEXP_替换的选项(在大型建筑中可能不如Sanders INSTR选项有效)(但仍然有效)


使用REGEXP_替换的选项(在大型建筑中可能不如Sanders INSTR选项有效)(但仍然有效)


你想要的结果是什么?我找到了解决方案-当INSTR(A.AGREEMENT_NUMBER,')0时,然后SUBSTR(A.AGREEMENT_NUMBER,0,INSTR(A.AGREEMENT_NUMBER,')-1)当INSTR(A.AGREEMENT_NUMBER,')时=0然后是A.AGREEMENT\u NUMBER——否则A.AGREEMENT\u NUMBER以输出形式结束您想要的结果是什么?我找到了解决方案-当INSTR(A.AGREEMENT\u NUMBER,'')0然后SUBSTR(A.AGREEMENT\u NUMBER,0,INSTR(A.AGREEMENT\u NUMBER,'')-1当INSTR(A.AGREEMENT\u NUMBER,'')=0然后A.AGREEMENT\u NUMBER——否则A.AGREEMENT\u NUMBER以输出形式结束