Как найти число в строке в DB2 SQL
Мне нужно найти число в строке в DB2 SQL, и у меня есть позиция первого числа.
Кто-нибудь может мне помочь, пожалуйста?
3 ответа
Предполагая, что вы используете Db2 11.1, вы должны использовать REGEXP_EXTRACT.
Например
values regexp_extract(' STR. 5TH PALACE WASHINGTONN, 15','\b[0-9]+\b')
возвращается
1
--
15
Решение 1
Одна или несколько цифр, за которыми не следует пробел.
Смотрите описание REGEXP_SUBSTR.
select str, regexp_substr(str, '[\d]+(?![^\s])') num
from table(values
'STR. WASHINGTONN 15'
, 'STR. WASHINGTONN, 15'
, 'STR. WASHINGTONN NR. 15'
, 'STR. 5TH PALACE WASHINGTONN, 15'
) t(str);
КСТАТИ:
Кажется, что отрицательный взгляд позади (?<![^\s])[\d]+(?![^\s])
(одна или несколько цифр, перед которыми не стоит пробел и не следует пробел), по крайней мере, не работает на моем DB2 7.3 для IBM i, но работает на Db2 11.1.
Решение 2
Мы добавляем пробелы с обеих сторон строки, если функция регулярного выражения lookahead/lookbehind не работает:
select str, trim(regexp_substr(' '||str||' ', '\s[\d]+\s')) num
from table(values
'STR. WASHINGTONN 15'
, 'STR. WASHINGTONN, 15'
, 'STR. WASHINGTONN NR. 15'
, 'STR. 5TH PALACE WASHINGTONN, 15'
) t(str);
Вы, вероятно, заинтересованы в функциях LOCATE или REGEXP_INSTR, но это действительно трудно понять по приведенной информации. REGEXP_INSTR является относительно новым, поэтому вам нужно проверить, доступен ли он в вашей версии Db2 на вашей платформе.