SQL-запрос для удаления определенного текста из каждого поля в определенном столбце — Oracle SQL

#sql #oracle

#sql #Oracle

Вопрос:

Я пытаюсь преобразовать следующее:

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

В следующий:

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

Таким образом, он выдает только первые 6 символов для каждого поля в столбце (в столбце намного больше записей). Мне нужно выбрать, а не переписывать таблицу. Кто-нибудь знает как?

Комментарии:

1. Что вы уже пробовали?

Ответ №1:

используйте substr()

ДЕМОНСТРАЦИЯ

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

ВЫВОД:

 VAL
128804
  

Ответ №2:

Простой метод regexp_substr() :

 select t.*, regexp_substr(file_id, '^[0-9] ') as file_id
from t;
  

Это возвращает начальные цифры из значения столбца.

Ответ №3:

 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