作為存盤程序的一部分,我收到一串用逗號分隔的名稱。名稱可以是名字、姓氏、全名或介于兩者之間的名稱。
如何確定該名稱是否存在于我的表中?
DECLARE @NameString
SET @NameString = Max,John World,Miller,Peter F, Will
桌子:
ID Name
1 10_Max_Power
2 11_Tim_Miller
3 87_John_World
4 12_Peter_Foo
5 3123_Tom_Miller
6 323_Jessica_Bar
期望的結果:
ID Name
1 10_Max_Power
2 11_Tim_Miller
3 87_John_World
4 12_Peter_Foo
5 3123_Tom_Miller
uj5u.com熱心網友回復:
理想情況下,不要傳遞分隔引數,使用表型別引數。然后你可以做這樣的事情:
DECLARE @Names table (Name nvarchar(100));
INSERT INTO @Names (Name)
VALUES('Max'),
('John World'),
('Miller'),
('Peter F'),
('Will');
SELECT YT.ID,
YT.Name
FROM dbo.YourTable YT
WHERE EXISTS (SELECT 1
FROM @Names N
--Rather than inline the REPLACE you could add Computed Column
--to your table type variable/parameter.
WHERE YT.Name LIKE CONCAT('%',REPLACE(N.Name,' ','[_]'),'%'));
如果您“必須”使用分隔字串,那么您可以使用STRING_SPLIT(我假設您使用的是完全支持的 SQL Server 版本,因為沒有什么可說的):
DECLARE @NameString nvarchar(4000)
SET @NameString = N'Max,John World,Miller,Peter F, Will';
SELECT YT.ID,
YT.Name
FROM dbo.YourTable YT
WHERE EXISTS (SELECT 1
FROM STRING_SPLIT (@NameString,',')
WHERE YT.Name LIKE CONCAT('%',TRIM(REPLACE(N.Name,' ','[_]')),'%')); --TRIM because Will has a leading space
但是,我也建議修復您的設計。值為 的“名稱”10_Max_Power違反了規范化規則。顯然,10除了名稱之外,還有別的東西。同樣清楚的是,您希望找到可能是名字或姓氏的人。因此,實際上,您的Name列應至少為3 列;Prefix(或任何數字代表),Forename和Surname(以及可選的中間名列)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446853.html
上一篇:均勻分布相關記錄
