2014-03-07 151 views
0

我的數據庫中的一個字段是一個包含多個用逗號分隔的用戶名的字符串(例如:'wasingej,doej,hamm,...「)我想要做一個查詢,其中選擇了一個數據庫條目(或多個) 。如果提供的用戶名出現包含多個用戶名字符串中如何執行此查詢?

我將如何做到這一點

+1

,你應該打破字符串分隔值分隔列。這就是數據庫中數據的屬性。 –

+0

爲什麼你在模型中存儲逗號分隔列表?這似乎是你的問題的第一部分。 – 2014-03-07 04:17:06

+0

使用contains關鍵字 –

回答

0

使用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的示例。

+1

我也在玩這個,但問題是雙重的 - 首先,LIKE不區分大小寫(可以'找出解決_that_的方法)。其次,你不確保你不匹配部分名稱 - 例如,你正在尋找'hamm',但你的字符串也會匹配'markhamm'或'hammmond'或'whatahammyname' –

+0

爲什麼這些空格?有什麼我失蹤? –

1

我能想出的最好的是

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 

它有它不上的情況下匹配的問題 - 不,如果你的輸入是不區分大小寫的問題,反正 - 但它優於憤怒的公牛的答案,因爲它不符合其他名稱中的名字(我的小提琴顯示了這種由不匹配「達妮埃拉」或「丹尼爾」)如果你在這個問題上選擇

http://sqlfiddle.com/#!6/72493/4

+0

也更容易理解。 –