Пример регулярных выражений DB2.
select
t.FIELD12
, xmlcast(xmlquery('let $r := fn:replace($s, ".* (\d+) +month.*", "$1", "i") return if ($r castable as xs:integer) then xs:integer($r) else ()' passing ' '||t.FIELD12 as "s") as int) number
from table (values
'4.99% for 6 Months until End'
, 'Equal Payments for 120 months'
, 'Equal Payments for 24 months'
, '1 month'
, 'wrong string'
, 'unknown number of months'
) t (FIELD12);
Результат:
FIELD12 NUMBER
---------------------------- ------
4.99% for 6 Months until End 6
Equal Payments for 120 months 120
Equal Payments for 24 months 24
1 month 1
wrong string -
unknown number of months -
В вашем случае должно быть что-то вроде этого:
SELECT SAMPLETABLE.CRED_CARD_ID
, SAMPLETABLE.LN_ORIG_DT
, SAMPLETABLE.ACCT_STAT_DESC
, SAMPLETABLE.CURR_BAL_AMT
, SAMPLETABLE.TRM_MTH_NBR
, SAMPLETABLE.PROMO_END_DT
, SAMPLETABLE.PURCH_WNDW_END_DT
, SAMPLETABLE.PROMO_TRM_TXT
, SAMPLETABLE.FIELD12
, xmlcast(xmlquery('let $r := fn:replace($s, ".* (\d+) +month.*", "$1", "i") return if ($r castable as xs:integer) then xs:integer($r) else ()' passing ' '||SAMPLETABLE.FIELD12 as "s") as int) as number
FROM
DB.SAMPLETABLE SAMPLETABLE
INNER JOIN
(SELECT MAX(SAMPLETABLE_1.BI_DATA_AS_OF_DT) AS AS_OF_DT
FROM DB.SAMPLETABLE SAMPLETABLE_1) Subquery
ON (SAMPLETABLE.BI_DATA_AS_OF_DT = Subquery.AS_OF_DT)
WHERE (SAMPLETABLE.ACCT_STAT_DESC = 'Open');
fn: replace функция принимает ваш SAMPLETABLE.FIELD12
в качестве 1-го параметра.2-й параметр - это шаблон регулярного выражения, с которым сравнивается переданное значение столбца.Значение шаблона .* (\d+) +month.*
подэлементов:
.*
- ноль или более любых символов
- один пробел
(\d+)
- одинили больше цифр;мы окружаем их ()
, чтобы ссылаться на него позже
+
- один или несколько пробелов
month
- строковая константа
.*
- ноль или болеелюбые символы
Если значение столбца соответствует этому шаблону, все значение заменяется на 1-е (и единственное) значение группы (в шаблоне, окруженное ()
, мы ссылаемся на это $1
в 3-м параметре функции).Если нет, то значение столбца остается неизменным.Наконец, мы пытаемся привести замененное значение к int
, используя выражение xpath.Возвращает NULL
, если такое приведение неудачно.