#sql #oracle #oracle11g #oracle10g #oracle12c
Вопрос:
У меня есть столбец X
, в Oracle
котором есть такие значения, как «a1b2c3», «abc», «1ab», «123», «156-346»
как мне написать sql-запрос, который возвращает мне только те X
, которые содержат чистые числовые значения, такие как 123,456
etc.
Я не могу использовать regexp_like
, потому что я использую 10g
.
Ответ №1:
Вот два варианта: один использует регулярные выражения, другой translate
-функцию.
SQL> with test as
2 (select 'a1b2c3' col from dual union all
3 select 'abc' from dual union all
4 select '1ab' from dual union all
5 select '123' from dual union all
6 select '156-346' from dual
7 )
8 select col,
9 regexp_replace(col, '[^[:digit:]]') result,
10 --
11 translate(col, '0'|| translate(col, '$0123456789', '
Комментарии:
1. Спасибо. но я не могу использовать regexp_replace, и я хочу использовать это в предложении where
2. Пожалуйста. Я добавил еще одну опцию, использующую функцию ПЕРЕВОДА. Посмотрим, поможет ли это.
3. На самом деле маленькая ножка, если столбец содержит строку, ее просто нужно игнорировать. на данный момент, если один столбец содержит 1, а другой столбец 1abc, он дает значение true.
4. может ли он дать значение null или 0, если столбец содержит что-либо, кроме целого числа?
Ответ №2:
При использовании translate
функции для удаления всех цифр и обрезки результата чистые числа дадут null
select x
from test
where trim(translate(x, '0123456789', ' ')) is null;
Убедитесь, что последним параметром должно быть 10 пробелов translate
.
Если x
столбец может содержать пробелы, то используйте
select x
from test
where trim(translate(replace(x,' ','*'), '0123456789', ' ')) is null;
), '0') result2
12 from test;
COL RESULT RESULT2
------- ------- -------
a1b2c3 123 123
abc
1ab 1 1
123 123 123
156-346 156346 156346
SQL>
Комментарии:
1. Спасибо. но я не могу использовать regexp_replace, и я хочу использовать это в предложении where
2. Пожалуйста. Я добавил еще одну опцию, использующую функцию ПЕРЕВОДА. Посмотрим, поможет ли это.
3. На самом деле маленькая ножка, если столбец содержит строку, ее просто нужно игнорировать. на данный момент, если один столбец содержит 1, а другой столбец 1abc, он дает значение true.
4. может ли он дать значение null или 0, если столбец содержит что-либо, кроме целого числа?
Ответ №2:
При использовании translate
функции для удаления всех цифр и обрезки результата чистые числа дадут null
Убедитесь, что последним параметром должно быть 10 пробелов translate
.
Если x
столбец может содержать пробелы, то используйте