Как найти число в строке в DB2 SQL

Мне нужно найти число в строке в DB2 SQL, и у меня есть позиция первого числа.

Кто-нибудь может мне помочь, пожалуйста?

3 ответа

Предполагая, что вы используете Db2 11.1, вы должны использовать REGEXP_EXTRACT.

https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0061492.html

Например

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 на вашей платформе.

Другие вопросы по тегам