我不知道该怎么做,但我有一串数据。我需要从字符串中隔离出一个长度不同的数字。原始字符串的长度也不同。让我给你举个例子。这是一组原始数据字符串:
:000000000:370765:P:000001359:::3SA70000SUPPL:3SA70000SUPPL:
:000000000:715186816:P:000001996:::H1009671:H1009671:
对于这两个示例,我需要第一个3SA70000SUPPL
和第二个H1009671
。我该如何使用SQL?我听说案件陈述可能有效,但我不知道如何。请帮忙。
答案 0 :(得分:1)
这适用于Oracle 11g:
with tbl as (
select ':000000000:370765:P:000001359:::3SA70000SUPPL:3SA70000SUPPL:' str from dual
union
select ':000000000:715186816:P:000001996:::H1009671:H1009671:' str from dual
)
select REGEXP_SUBSTR(str, '([^:]*)(:|$)', 1, 8, NULL, 1) data
from tbl;
其中可以描述为“查看第0个出现的零个或多个非冒号字符,后跟冒号或行尾,并返回第一个子组(数据少于冒号或结尾)这条线。)
从这篇文章:REGEX to select nth value from a list, allowing for nulls
抱歉,刚看到您正在使用DB2。我不知道是否有一个等效的正则表达式函数,但它可能仍然有用。
为了它的乐趣:SQL Fiddle
答案 1 :(得分:0)
第一个子字符串获取:::的字符串,第二个子字符串检索从:::开始的字符串: 声明@x varchar(1024)=':000000000:715186816:P:000001996 ::: H1009671:H1009671:'
declare @temp varchar(1024)= SUBSTRING(@x,patindex('%:::%', @x)+3, len(@x))
SELECT SUBSTRING( @temp, 0,CHARINDEX(':', @temp, 0))