我需要幫助計算在字串中找到“模式”的次數。我正在使用一種將輸入的模式提取到列中的工具。我的日期集如下所示:
| ID | 匹配模式 |
|---|---|
| 1 | “[模式一:SE09B00218],[模式二:0000000-09000,0974837-01]” |
| 2 | “[模式一:SE09B00218,DA02F11418],[模式二:0000000-09,0974837-01]” |
| 3 | “[模式一:TR38G01678,DA02F11418,KJ73F4567]” |
| 4 | “[模式二:0000009-00000007,1234567-02,0939485-0004,09836473-1]” |
您可以看到每個模式可以找到多次(最多 200 次),以逗號分隔,也可以為空。識別的每個模式也可以是不同的長度。
這是我希望輸出的樣子:
| ID | PatternOneCount | 模式雙計數 |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 2 | 2 |
| 3 | 3 | 0 |
| 4 | 0 | 4 |
這可能嗎?
非常感謝
uj5u.com熱心網友回復:
假設您使用的是(完全)受支持的 SQL Server 版本,您可以將資料轉換為有效的 JSON,然后使用它。
因此,首先REPLACE將括號 ( []) 與雙引號 ( "),以及將冒號 ( :) 與雙引號括起來。然后將整個字串包裹在大括號 ( {}) 中,以獲取您的 JSON 字串。
接下來,您使用 使用該 JSON OPENJSON,用于STRING_SPLIT拆分分隔資料,然后最后使用條件聚合... yuck。
SELECT V.Id,
COUNT(CASE J.[key] WHEN 'Pattern One' THEN SS.[value] END) AS PatternOne,
COUNT(CASE J.[key] WHEN 'Pattern Two' THEN SS.[value] END) AS PatternTwo
FROM (VALUES(1,'[Pattern One: SE09B00218], [Pattern Two: 0000000-09000,0974837-01]'),
(2,'[Pattern One: SE09B00218,DA02F11418], [Pattern Two: 0000000-09,0974837-01]'),
(3,'[Pattern One: TR38G01678,DA02F11418,KJ73F4567]'),
(4,'[Pattern Two: 0000009-00000007,1234567-02,0939485-0004,09836473-1]'))V(Id,MatchedPatterns)
--Make the pattern valid JSON
CROSS APPLY (VALUES(REPLACE(TRANSLATE(V.MatchedPatterns,'[]','""'),': ','":"')))R(JsonPatterns)
CROSS APPLY OPENJSON(CONCAT('{',R.JsonPatterns,'}')) J
OUTER APPLY STRING_SPLIT(J.[value],',') SS
GROUP BY V.Id;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/435042.html
