我有以下序列化值:
Active=1&Time=19&Loops=2&looptype=loopcustom&CC=john@gmail.com&CC=joane@gmail.com&MyMessage=something
我怎样才能得到CC的值。 我的意思是将值john@gmail.com和joane@gmail.com分为2行或2个变量。
这方面的一个大问题是价值总是在变化, 例如,它可以有更多的CC值或其他参数。 序列化值是动态的,而不是静态的。
我尝试使用patindex等,但它不起作用,因为值并不总是相同。
有人有个主意吗?
答案 0 :(得分:1)
我确定这可能不是最好的方法,但它有效(对于你的例子):
DECLARE @x VARCHAR(1000) = 'Active=1&Time=19&Loops=2&looptype=loopcustom&CC=john@gmail.com&CC=joane@gmail.com&MyMessage=something'
WHILE CHARINDEX('CC',@x) <> 0
BEGIN
SELECT SUBSTRING(@X,
CHARINDEX('CC=',@X)+3,
CHARINDEX('&',@X,CHARINDEX('CC=',@X)) - (CHARINDEX('CC=',@X)+3) )
SELECT @x = SUBSTRING(@X,CHARINDEX('&',@X,CHARINDEX('CC=',@X)),LEN(@X))
END
答案 1 :(得分:1)
将其转换为xml:
DECLARE @txt varchar(2000) = 'Active=1&Time=19&Loops=2&looptype=loopcustom&CC=john@gmail.com&CC=joane@gmail.com&MyMessage=something'
SELECT
STUFF(t.c.value('.', 'VARCHAR(2000)'), 1, 3, '')
FROM (
SELECT x = CAST('<t>' +
REPLACE(@txt, '&', '</t><t>') + '</t>' AS XML)
) a
CROSS APPLY x.nodes('/t') t(c)
WHERE
t.c.value('.', 'VARCHAR(2000)') like 'CC=%'
结果:
john@gmail.com
joane@gmail.com