Функция LOCATE_IN_STRING в Db2 - PullRequest
1 голос
/ 15 мая 2019

Используя функцию LOCATE_IN_STRING в Db2, я хочу отделить Поле 2 и Поле 3 от строки ниже.

RTN1319 5.7.18 INSUFFICIENT FUNDS

Поле 1: Номер поля ЧК

Поле 2: Tr Поле даты

Поле 3: причина

Я хочу вытащить только TR Дата и причина

Select TRIM(SUBSTR(TRIM('RTNCK1319 5.7.19 INSUFFICIENT FUNDS'),LOCATE_IN_STRING(TRIM('RTNCK1319 5.7.19 INSUFFICIENT FUNDS'),' ',+1))) from SYSIBM.SYSDUMMY1 ;


Select TRIM(SUBSTR(TRIM('RTNCK1319 5.7.19 INSUFFICIENT FUNDS'),LOCATE_IN_STRING(TRIM('RTNCK1319 5.7.19 INSUFFICIENT FUNDS'),' ',+1))) from SYSIBM.SYSDUMMY1 ;

1 Ответ

0 голосов
/ 15 мая 2019

Для всех версий Db2 для LUW:

with t (s) as (values 
  'RTNCK1319  5.7.19   INSUFFICIENT FUNDS'
)
select 
  xmlcast(xmlquery('fn:tokenize($s, " +")[2]' passing ltrim(t.s) as "s") as varchar(10))
, xmlcast(xmlquery('fn:replace($s, "^ *[^ ]+ +[^ ]+ +", "")' passing t.s as "s") as varchar(100))
from t;

Без регулярного выражения (1-е два промежуточных пробела должны быть одинарными):

with t (s) as (values 
  'RTNCK1319 5.7.19 INSUFFICIENT FUNDS'
)
select 
  substr(s, s1pos+1, s2pos-s1pos) s1
, substr(s, s2pos+1) s2
from 
(
select 
  ltrim(s) s 
, locate_in_string(ltrim(s), ' ', 1, 1) s1pos
, locate_in_string(ltrim(s), ' ', 1, 2) s2pos
from t
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...