我們如何在 SQL Server 中@ClientIDCode使用@CodeMask字串動態更改它?
DECLARE @ClientIDCode varchar(20) = '1000003351', @CodeMask VARCHAR(50) = 'XXX-XXX'
DECLARE @ClientIDCode varchar(20) = '1000003351', @CodeMask VARCHAR(50) = 'XX-XXXX'
DECLARE @ClientIDCode varchar(20) = '1000003351', @CodeMask VARCHAR(50) = 'XX&XXXX'
我想要這樣的輸出:
1000003-351
100000-3351
100000&3351
uj5u.com熱心網友回復:
我不確定這是否會比 John 使用的性能更高FORMAT(這是一個已知的性能不佳的性能),但它不涉及更改資料型別。您可以將字串拆分為單獨的字符,然后進行字串聚合,用掩碼替換非 X 字符:
SELECT STRING_AGG(CASE SS.M WHEN 'X' THEN SS.C ELSE SS.M END,'') WITHIN GROUP (ORDER BY V.I DESC)
FROM (VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17),(18),(19),(20))V(I)
CROSS APPLY (VALUES(SUBSTRING(REVERSE(@ClientIDCode),V.I,1),ISNULL(NULLIF(SUBSTRING(REVERSE(@CodeMask), V.I,1),''),'X')))SS(C,M)
WHERE SS.C != '';
這假定 @ClientIDCode不能超過 20 個字符(如您將其定義為 a varchar(20))。如果它可以更長,則使用行內計數。
這還假設您使用的是受支持的 SQL Server 版本,因為您沒有提到您不是。
經過測驗,這在我的本地主機、作業沙箱和
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341838.html
標籤:sql sql-server
