我的数据库中的一个字段是一个包含多个用逗号分隔的用户名的字符串(例如:'wasingej,doej,hamm,...)。我想进行查询,其中数据库条目(或多个)是如果提供的用户名出现在包含多个用户名的字符串中,则会被选中。
我该怎么做?
答案 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'来表明这一点
答案 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中的示例。