Как разбить строку в db2? - PullRequest
0 голосов
/ 02 мая 2019

У меня есть несколько URL в моей таблице cas_fnd_dwd_det,

casi_imp_urls                           cas_code
-----------------------------------    -----------
www.casiac.net/fnds/CASI/qnxp.pdf      
www.casiac.net/fnds/casi/as.pdf        
www.casiac.net/fnds/casi/vindq.pdf     
www.casiac.net/fnds/CASI/mnip.pdf      

как мне скопировать буквы между последними '/' и '.pdf' в другой столбец

ожидаемыйитоги

casi_imp_urls                           cas_code
-----------------------------------    -----------
www.casiac.net/fnds/CASI/qnxp.pdf      qnxp
www.casiac.net/fnds/casi/as.pdf        as   
www.casiac.net/fnds/casi/vindq.pdf     vindq
www.casiac.net/fnds/CASI/mnip.pdf      mnip

статические URL ниже

www.casiac.net/fnds/CASI/
www.casiac.net/fnds/casi/

Посоветуйте, как выбрать коды между последними '/' и '.pdf'?

Ответы [ 2 ]

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

Для более старых версий Db2, чем 11.1.Не уверен, что это работает для 9.5, но определенно должно работать с 9.7.
Попробуйте это как есть.

with cas_fnd_dwd_det (casi_imp_urls) as (values  
  'www.casiac.net/fnds/CASI/qnxp.pdf'
, 'www.casiac.net/fnds/casi/as.pdf'
, 'www.casiac.net/fnds/casi/vindq.pdf'
, 'www.casiac.net/fnds/CASI/mnip.PDF'
)
select 
  casi_imp_urls
, xmlcast(xmlquery('fn:replace($s, ".*/(.*)\.pdf", "$1", "i")' passing casi_imp_urls as "s") as varchar(50)) cas_code
from cas_fnd_dwd_det
0 голосов
/ 02 мая 2019

Я бы рекомендовал взглянуть на REGEXP_SUBSTR . Это позволяет применять регулярные выражения. Db2 имеет функции обработки строк, но функция регулярных выражений может быть самым простым решением. См. SO вопрос о регулярных выражениях и URI-частях , чтобы узнать о различных способах написания выражения. Следующий код вернет последний слеш, имя файла и расширение:

SELECT REGEXP_SUBSTR('http://fobar.com/one/two/abc.pdf','\/(\w)*.pdf' ,1,1) 
   FROM sysibm.sysdummy1

/ abc.pdf

Далее используется REPLACE, а шаблон взят из этого SO вопроса с добавленным расширением файла pdf. Он разбивает строку на три группы: все до последней косой черты, затем имя файла, затем «.pdf». '$1' возвращает группу 1 (группы начинаются с 0). Группа 2 будет ".pdf".

SELECT REGEXP_REPLACE('http://fobar.com/one/two/abc.pdf','(?:.+\/)(.+)(.pdf)','$1' ,1,1) 
   FROM sysibm.sysdummy1

а

Вы можете применить ДЛИНУ и SUBSTR для извлечения соответствующей части или попытаться встроить ее в регулярное выражение.

...