繁体   English   中英

提取句点分隔符之间的字符串

[英]Extract string between period delimiter

我需要从下面的SQL字符串中提取P4534 这两个周期之间的长度可以改变。 因此,在执行子字符串时,我还需要考虑这两个时间段之间的较长字符串。 我怎样才能从另一个位置开始?

<?xml version="1.0" encoding="utf-8"?><mydata>9.9.P4534.2.3</mydata>

AT()函数返回一个整数,该整数指示字符表达式的第一个字符的位置。

STORE '9.9.P4534.2.3' TO gcString
STORE 'P4534' TO gcFindString
SUBSTRING(gcString, AT(gcFindString,gcString), 5)

旋转一下。 它采用XML格式,因此您可以利用xQuery来获取<mydata>的值,然后替换每个“。”。 使用<M>标签,然后再次使用xQuery将结果集推入表中,并以第3行作为值。

DECLARE @STRING VARCHAR(1000)
SET @STRING = '<?xml version="1.0" encoding="utf-8"?><mydata>9.9.P4534.2.3</mydata>'
--SET @STRING = '<?xml version="1.0" encoding="utf-8"?><mydata>9.9.P4456789534.2.3</mydata>'

DECLARE @XML TABLE (val VARCHAR(1000))
INSERT INTO @XML(val) SELECT @STRING

DECLARE @PARTS TABLE (id int identity(1,1), val VARCHAR(1000))

INSERT INTO @PARTS (val)
SELECT Split.a.value('.', 'VARCHAR(max)') AS String
FROM  
(
    SELECT CAST ('<M>' + REPLACE(CAST(Split.B.value('.', 'VARCHAR(max)') AS VARCHAR), '.', '</M><M>') + '</M>' AS XML) AS String
    FROM  (SELECT CAST(val AS XML) AS String  
           FROM @XML) AS B 
    CROSS APPLY String.nodes ('/mydata') AS Split(B)
) AS A 
CROSS APPLY String.nodes ('/M') AS Split(a)

SELECT val
FROM @PARTS
WHERE id=3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM