Sql server 可以在SQL中解析键:值对吗
我有一个数据库列(varchar),它保存以下格式的数据:Sql server 可以在SQL中解析键:值对吗,sql-server,split,Sql Server,Split,我有一个数据库列(varchar),它保存以下格式的数据: 操作:下载文档|状态:1 |站点:250104 |参考:19014 |成员:12345 我知道我可以使用STRING_SPLIT来获取成对的key:value,但我正在尝试获取一个键和值表。我尝试过拆分的并集,但到目前为止只会出现错误 我试过了 ;WITH cte_pairs AS ( SELECT value FROM STRING_SPLIT(@activityValue, '|') ) , cte_keyvalu
操作:下载文档|状态:1 |站点:250104 |参考:19014 |成员:12345
我知道我可以使用STRING_SPLIT来获取成对的key:value
,但我正在尝试获取一个键和值表。我尝试过拆分的并集,但到目前为止只会出现错误
我试过了
;WITH cte_pairs AS
(
SELECT value
FROM STRING_SPLIT(@activityValue, '|')
)
, cte_keyvalues AS
(SELECT value
FROM STRING_SPLIT(cte_pairs.value,':')
)
SELECT * FROM cte_keyvalues
是的,这很简单
SELECT [key] = LEFT(s.value, ca.pos - 1),
[value] = SUBSTRING(s.value, ca.pos + 1, 8000)
FROM STRING_SPLIT(@activityValue, '|') s
CROSS APPLY (VALUES(CHARINDEX(':', s.value))) ca(pos);
是的,这很简单
SELECT [key] = LEFT(s.value, ca.pos - 1),
[value] = SUBSTRING(s.value, ca.pos + 1, 8000)
FROM STRING_SPLIT(@activityValue, '|') s
CROSS APPLY (VALUES(CHARINDEX(':', s.value))) ca(pos);
8000是从哪里来的?@Nick-只是一个大数字,希望比实际中可能存在的任何
值都要大。这样它就可以一直读取到字符串的末尾,而无需费心使用LEN
来计算字符的确切数目。8000是从哪里来的?@Nick-这只是一个大数字,希望比实际中可能存在的任何值都要大。这样它就可以一直读取到字符串的末尾,而无需费心使用LEN
来计算确切的字符数