2013-09-13 3 views
1

Я хотел бы выполнить запрос, который будет показывать всю строку перед тире в конкретном поле.SQL Query, чтобы показать строку перед тире

Например:

Исходные данные: AB-123

После запроса: AB

+1

SQL запрос необходим только для вышеуказанного запроса, PLSQL только необходимо, если логика не может быть сделана с помощью SQL, или при использовании петли или условие т.д., – ajmalmhd04

ответ

2

Вы можете использовать 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 
+0

Первый вариант будет возвращать пустую строку входные строки, которые не содержат тире (не уверены, хочет ли это OP). –

+1

@FrankSchmitt Что не указано может быть только неожиданным =) –

+0

'[^ -] +' кажется более короткой альтернативой для вашего второго аргумента функции regexp_substr. Или мне не хватает какого-то края? –

0

Вы можете использовать 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 
0

Я нашел это простой

SELECT distinct 
     regexp_replace(d.pyid, '-.*$', '') as result 
    FROM schema.table d; 

pyID колонка содержит ABC-123, DEF-3454

SQL Result :

ABC DEF

Смежные вопросы