我该如何执行此查询?

时间:2014-03-07 04:13:15

标签: sql django

我的数据库中的一个字段是一个包含多个用逗号分隔的用户名的字符串(例如:'wasingej,doej,hamm,...)。我想进行查询,其中数据库条目(或多个)是如果提供的用户名出现在包含多个用户名的字符串中,则会被选中。

我该怎么做?

2 个答案:

答案 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

它有一个问题,它在案例上不匹配 - 如果您的输入不区分大小写也不是问题 - 但它比Raging Bull的答案更好,因为它与其他名称中的名称不匹配(我的小提琴通过不匹配'Daniella'或'Daniel'来表明这一点

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

答案 1 :(得分: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中的示例。