#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:
Ответ №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