2012-05-09 2 views
0

У меня есть следующий запрос оракул, который прекрасно работаетOracle SQL запрос, чтобы исключить строки, содержащие не-числовые символы

SELECT c.customercode, s.sales_id 
FROM customers c 
LEFT JOIN sales s ON c.customercode = s.sales_id 
WHERE c.address IS NOT NULL 

и возвращает результаты выглядеть примерно так:

customercode  sales_id 
12345678   456 
34534534   678 
23423423   X123 

Что я хотел бы это исключить строки, в которых sales_id содержит что-либо, кроме числовых символов. Таким образом, приведенные выше результаты не будут включать 3-й ряд.

ответ

4

Вы можете использовать регулярные выражения. В этом случае, regexp_like(sales_id, '^[[:digit:]]*$')

SQL> with x as (select 12345678 code, '456' sales_id from dual union all 
    2    select 34534534, '678' from dual union all 
    3    select 23423423, 'X123' from dual) 
    4 select * 
    5 from x 
    6 where regexp_like(sales_id, '^[[:digit:]]*$'); 

     CODE SALE 
---------- ---- 
    12345678 456 
    34534534 678 
1

TRANSLATE будет работать тоже:

WITH q AS (
SELECT '12345678' customercode,'456' sales_id FROM dual 
UNION ALL 
SELECT '34534534','678' FROM dual 
UNION ALL 
SELECT '23423423','X123' FROM dual 
) 
SELECT * 
    FROM q 
WHERE TRANSLATE(sales_id,'A1234567890','A') IS NULL; 
Смежные вопросы