如何解析动态字符串以提取数据?下面的示例:(用于SQL Server 2008 R2的T-SQL编写)
要解析的日期:
BUSINESS=12^REFERENCE=9255^ACCOUNT_TYPE=SUPPLIER^SHIPPING_ID=ACHP^
我需要REFERENCE
时的ACCOUNT_TYPE=SUPPLIER
号码。
参考编号的长度可以是1到16个字符。
我的SQL语句看起来像这样:
SELECT <REFERENCE NUMBER> FROM ACCOUNTS
结果看起来像这样:
9255
84
1
151221
415
99
etc...
答案 0 :(得分:4)
您应该规范化您的数据。但这是一个解决方案。
declare @accounts table(col1 varchar(max))
insert @accounts values('BUSINESS=12^REFERENCE=9255^ACCOUNT_TYPE=SUPPLIER^SHIPPING_ID=ACHP^')
SELECT replace(data, 'REFERENCE=', '') FROM
(
SELECT t.c.value('.', 'VARCHAR(2000)') data
FROM (
SELECT x = CAST('<t>' +
REPLACE(col1, '^', '</t><t>') + '</t>' AS XML)
FROM @accounts
WHERE col1 like '%ACCOUNT_TYPE=SUPPLIER%'
) a
CROSS APPLY x.nodes('/t') t(c)
) x
WHERE data like 'REFERENCE=%'
结果:
9255
修复您的数据,这将使您免于悲伤
答案 1 :(得分:0)
这将为您提供包含您给出的示例的每一行所需的数字:
DECLARE @text VARCHAR(50)
SET @text = 'BUSINESS=12^REFERENCE=9255^ACCOUNT_TYPE=SUPPLIER^SHIPPING_ID=ACHP^'
SELECT SUBSTRING(@text,CHARINDEX('^REFERENCE',@text)+11,
(CHARINDEX('^ACCOUNT_TYPE',@text))
- (CHARINDEX('^REFERENCE',@text)+11))
只需将@text
替换为字段名称,您就可以了!