我正在尋求清理資料集中列的幫助,以便我可以加入另一個表。
第一個資料集是我的完整資料,包括我們所說的與特定案例相關的“ reference_numbers ”。這是一個虛擬樣本:
| 參考編號 | case_opened | case_closed |
|---|---|---|
| 01353568-00000001 | 2021 年 11 月 1 日 | 2022 年 3 月 2 日 |
| 09736473-00000009 | 21/04/2005 | 2021 年 7 月 19 日 |
| 05839576-00000012 | 2014 年 9 月 13 日 | 2017 年 12 月 19 日 |
| 09364857-00000006 | 2014 年 9 月 13 日 | 2017 年 12 月 19 日 |
如您所見,“reference_number”是 8 位數字,然后是連字符 (-),然后是另外 8 位數字。這就是參考編號的外觀。
我的第二個資料集充滿了相同的“reference_numbers”。但是,字符長度存在不一致,因為它們通常由個人書寫不同:
| 參考編號 | 個案作業者 |
|---|---|
| 1353568-00000001 | 5 |
| 09736473-9 | 10 |
| 5839576-12 | 7 |
| 09364857-000000006 | 4 |
- 第二個資料集中的第一個reference_number缺少第一個“0”
- 第二個資料集中的第二個reference_number在連字符后缺少七個“0”
- 第二個資料集中的第三個reference_number缺少連字符后的第一個“0”和六個“0”
- 第二個資料集中的第四個reference_number在連字符后的數字太多(應該有七個0)
我希望能夠使用 reference_number 將第一個資料集連接到第二個資料集。但是,我需要先清潔它們。這是可能的嗎?有什么有效的方法嗎?
謝謝
uj5u.com熱心網友回復:
如果規則如此具體,您可以嘗試使用STRING_SPLITand的組合STRING_AGG:
SELECT
t.reference_number,
STRING_AGG(RIGHT('00000000' s.value,8),'-') new_reference_number
FROM dbo.SecondTable t
CROSS APPLY STRING_SPLIT(t.reference_number,'-') s
GROUP BY t.reference_number
;
使用您發布的示例資料,結果是:
╔════════════════════╦══════════════════════╗
║ reference_number ║ new_reference_number ║
╠════════════════════╬══════════════════════╣
║ 09364857-000000006 ║ 09364857-00000006 ║
║ 09736473-9 ║ 09736473-00000009 ║
║ 1353568-00000001 ║ 01353568-00000001 ║
║ 5839576-12 ║ 05839576-00000012 ║
╚════════════════════╩══════════════════════╝
uj5u.com熱心網友回復:
select reference_number,
CONCAT(left(reference_number, charindex('-', reference_number) - 1),'-',RIGHT(CONCAT('000000000',right(reference_number, len(reference_number) - charindex('-', reference_number))),9)) as NewReferenceNumber
from YourSecondTableName
| 參考編號 | New_Reference_Number |
|---|---|
| 1353568-00000001 | 1353568-000000001 |
| 09736473-9 | 09736473-000000009 |
| 5839576-12 | 5839576-000000012 |
| 09364857-000000006 | 09364857-000000006 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/425861.html
