满足一定条件时将adding/removing个字符清洗成字符串 T-SQL

Cleaning data by adding/removing characters to a string when it meets certain conditions T-SQL

我正在寻求有关清理数据集中列的帮助,以便我可以加入另一个 table。

第一个数据集是我的完整数据,包括我们所说的“reference_numbers”,它涉及到一个特定的案例。这是一个虚拟样本:

reference_number case_opened case_closed
01353568-00000001 11/01/2021 03/02/2022
09736473-00000009 21/04/2005 19/07/2021
05839576-00000012 13/09/2014 19/12/2017
09364857-00000006 13/09/2014 19/12/2017

如您所见,“reference_number”是 8 位数字,然后是连字符 (-),然后是另外 8 位数字。这是参考编号的外观。

我的第二个数据集充满了相同的“reference_numbers”。但字长不一致,往往因人而异:

reference_number Case_workers
1353568-00000001 5
09736473-9 10
5839576-12 7
09364857-000000006 4

我希望能够使用 reference_number 将第一个数据集连接到第二个数据集。但是,我需要先清理它们。这可能吗?有什么有效的方法吗?

谢谢

如果规则如此具体,您可以尝试使用 STRING_SPLITSTRING_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    ║
╚════════════════════╩══════════════════════╝
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

Reference_Number New_Reference_Number
1353568-00000001 1353568-000000001
09736473-9 09736473-000000009
5839576-12 5839576-000000012
09364857-000000006 09364857-000000006