2014-03-07 149 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

也更容易理解。 –