我的數據庫中的一個字段是一個包含多個用逗號分隔的用戶名的字符串(例如:'wasingej,doej,hamm,...「)我想要做一個查詢,其中選擇了一個數據庫條目(或多個) 。如果提供的用戶名出現包含多個用戶名字符串中如何執行此查詢?
我將如何做到這一點
我的數據庫中的一個字段是一個包含多個用逗號分隔的用戶名的字符串(例如:'wasingej,doej,hamm,...「)我想要做一個查詢,其中選擇了一個數據庫條目(或多個) 。如果提供的用戶名出現包含多個用戶名字符串中如何執行此查詢?
我將如何做到這一點
使用LIKE
:
DECLARE @CONDITION VARCHAR(255)
SET @CONDITION = '%'' UNION SELECT * FROM TableName WHERE ColName LIKE ''%'
DECLARE @Unames VARCHAR(255) --List of username you pass from your program
SET @Unames = 'wasingej,doej,hamm' --Taking it as an example
DECLARE @FullQuery VARCHAR(255)
SET @FullQuery = 'SELECT *
FROM TableName
WHERE ColName LIKE ''%'+REPLACE(@Unames,',',@CONDITION)+'%''' --Replacing comma with @Condition
EXEC(@FullQuery)
最後,您可以讓您的查詢的可變@FullQuery
像這樣:
SELECT * FROM TableName WHERE ColName LIKE '%wasingej%'
UNION
SELECT * FROM TableName WHERE ColName LIKE '%doej%'
UNION
SELECT * FROM TableName WHERE ColName LIKE '%hamm%'
查看SQL Fiddle的示例。
我也在玩這個,但問題是雙重的 - 首先,LIKE不區分大小寫(可以'找出解決_that_的方法)。其次,你不確保你不匹配部分名稱 - 例如,你正在尋找'hamm',但你的字符串也會匹配'markhamm'或'hammmond'或'whatahammyname' –
爲什麼這些空格?有什麼我失蹤? –
我能想出的最好的是
CREATE TABLE supportContacts
(
id int identity primary key,
usernames varchar(255),
);
INSERT INTO supportContacts
(usernames)
VALUES
('Dan'),
('DAN,SCOTT'),
('Jordan,Michael,Dan'),
('Adam,Kelly,Daniel,Roger,Sue'),
('Crystal,Kari,Logan,Daniella'),
('Jon,Dan,Xerxes,Brian'),
('Samantha,Keylin,Dan')
;
SELECT * from supportContacts WHERE
usernames = 'Dan' or -- only dan
usernames LIKE 'Dan,%' or -- begins
usernames LIKE ',Dan,' or -- within
usernames LIKE '%,Dan' -- ends
它有它不上的情況下匹配的問題 - 不,如果你的輸入是不區分大小寫的問題,反正 - 但它優於憤怒的公牛的答案,因爲它不符合其他名稱中的名字(我的小提琴顯示了這種由不匹配「達妮埃拉」或「丹尼爾」)如果你在這個問題上選擇
也更容易理解。 –
,你應該打破字符串分隔值分隔列。這就是數據庫中數據的屬性。 –
爲什麼你在模型中存儲逗號分隔列表?這似乎是你的問題的第一部分。 – 2014-03-07 04:17:06
使用contains關鍵字 –