当字符串满足特定条件T-SQL时,通过向字符串添加/删除字符来清理数据



我正在寻找清理数据集中一列的帮助,以便可以联接到另一个表。

第一个数据集是我的完整数据,包括我们称之为">reference_numbers";其涉及特定情况。这是一个伪样本:

案例关闭2022年2月3日2021年7月19日2017年12月19日2017年12月19日
reference_number 案例打开
01353568-0000000 1 2021年1月11日
09736473-00000 9 2005年4月21日
05839576-000012 2014年9月13日
09364857-00000 6 2014年9月13日

如果规则非常具体,您可以尝试使用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_NumberNew_Reference_Number
1353568-0000000 11353568-00000000 1
09736473-909736473-00000009
5839576-125839576-00000 12
09364857-0000609364857000000006

最新更新