【问题标题】:Is it possible to parse key:value pairs in SQL是否可以在 SQL 中解析键:值对
【发布时间】:2019-03-12 23:05:48
【问题描述】:

我有一个数据库列 (varchar),其中包含以下格式的数据:

Action:DownloadDocuments|State:1|Site:250104|Ref:19014|Member:12345

我知道我可以使用 STRING_SPLIT 来获取 key:value 对,但我正在尝试获取键和值表。我已经尝试过 UNIONS 的拆分,但到目前为止只是得到错误


我试过了

        ;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

【问题讨论】:

    标签: sql-server split


    【解决方案1】:

    是的,这很简单

    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 - 只是一个很大的数字,希望比实践中可能存在的任何value 都要大。这样它就可以一直读取到字符串的末尾,而无需费心用LEN 来计算确切的字符数
    猜你喜欢
    • 1970-01-01
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多