SQL查询以从特定列的每个字段中删除某些文本-Oracle SQL

时间:2019-03-21 11:42:54

标签: sql oracle

我正在尝试转换以下内容:

*----*----------------------------*
| id | file_id                  
*----*----------------------------*    
| 1  | 128804/12/0 
*----*----------------------------*
| 2  | 128876/15/0 
*----*----------------------------*

进入以下内容:

*----*----------------------------*
| id | file_id                
*----*----------------------------*    
| 1  | 128804    
*----*----------------------------*
| 2  | 128876   
*----*----------------------------*

因此,它仅给出列中每个字段的前6个字符(该列有更多条目)。我需要选择而不是重写表。有人知道吗?

3 个答案:

答案 0 :(得分:2)

使用substr()

DEMO

select substr(file_id,0,INSTR(file_id, '/')-1)

输出:

VAL
128804

答案 1 :(得分:1)

一个简单的方法是\\

regexp_substr()

这将返回列值的前导数字。

答案 2 :(得分:1)

with s (id, file_id) as (
select 1, '128804/12/0'   from dual union all
select 2, '128876/15/0'   from dual union all
select 3, '128876'        from dual union all
select 4, '128876/128876' from dual)
select id, file_id,
regexp_substr (file_id, '[^/]+') as file_id_sub_1,
regexp_replace(file_id, '/.*')   as file_id_sub_2
from s;

        ID FILE_ID       FILE_ID_SUB_1   FILE_ID_SUB_2
---------- ------------- --------------- ---------------
         1 128804/12/0   128804          128804
         2 128876/15/0   128876          128876
         3 128876        128876          128876
         4 128876/128876 128876          128876