Я хотел бы выполнить запрос, который будет показывать всю строку перед тире в конкретном поле.SQL Query, чтобы показать строку перед тире
Например:
Исходные данные: AB-123
После запроса: AB
Я хотел бы выполнить запрос, который будет показывать всю строку перед тире в конкретном поле.SQL Query, чтобы показать строку перед тире
Например:
Исходные данные: AB-123
После запроса: AB
Вы можете использовать substr
:
SQL> WITH DATA AS (SELECT 'AB-123' txt FROM dual)
2 SELECT substr(txt, 1, instr(txt, '-') - 1)
3 FROM DATA;
SUBSTR(TXT,1,INSTR(TXT,'-')-1)
------------------------------
AB
или regexp_substr
(10г +):
SQL> WITH DATA AS (SELECT 'AB-123' txt FROM dual)
2 SELECT regexp_substr(txt, '^[^-]*')
3 FROM DATA;
REGEXP_SUBSTR(TXT,'^[^-]*')
---------------------------
AB
Первый вариант будет возвращать пустую строку входные строки, которые не содержат тире (не уверены, хочет ли это OP). –
@FrankSchmitt Что не указано может быть только неожиданным =) –
'[^ -] +' кажется более короткой альтернативой для вашего второго аргумента функции regexp_substr. Или мне не хватает какого-то края? –
Вы можете использовать regexp_replace
.
Например
WITH DATA AS (
SELECT 'AB-123' as text FROM dual
UNION ALL
SELECT 'ABC123' as text FROM dual
)
SELECT
regexp_replace(d.text, '-.*$', '') as result
FROM DATA d;
приведет к
WITH DATA AS (
2 SELECT 'AB-123' as text FROM dual
3 UNION ALL
4 SELECT 'ABC123' as text FROM dual
5 )
6 SELECT
7 regexp_replace(d.text, '-.*$', '') as result
8 FROM DATA d;
RESULT
------------------------------------------------------
AB
ABC123
Я нашел это простой
SELECT distinct
regexp_replace(d.pyid, '-.*$', '') as result
FROM schema.table d;
pyID колонка содержит ABC-123, DEF-3454
SQL Result :
ABC DEF
SQL запрос необходим только для вышеуказанного запроса, PLSQL только необходимо, если логика не может быть сделана с помощью SQL, или при использовании петли или условие т.д., – ajmalmhd04