Nea*_*aox 44 sql t-sql sql-server csv sql-server-2008
嗨,我想知道如何为SQL Server 2008编写SQL语句,选择条目包含值的列,现在列中的值是逗号分隔列表(通常 - 只能有一个条目(并且没有前导逗号)所以In check for是"这个值是否包含在列表中的某个位置?",例如:
COLUMN = Cat, Dog, Sparrow, Trout, Cow, Seahorse
Does COLUMN contain Cat? YES
Does COLUMN contain horse? NO
Does COLUMN contain Sheep? NO
Run Code Online (Sandbox Code Playgroud)
要么
COLUMN = Mouse
Does COLUMN contain Hare? NO
Does COLUMN contain Mouse? YES
Run Code Online (Sandbox Code Playgroud)
等等
我以为我可以使用'IN'关键字
SELECT id_column FROM table_name WHERE 'Cat' IN COLUMN
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为您似乎只能使用它来检查列是否包含一系列逗号分隔值之一.
我也不能使用CONTAINS()或'LIKE'作为这个,在上面的例子中会返回'horse'的值,因为整个字符串包含'Seahorse'中的马,我不能搜索针加上逗号(如果我正在寻找'马',搜索将是'马',)如果条目在列表的末尾怎么办?我不能搜索逗号加针(如果我正在寻找'马',搜索将是',马'),如果条目是列表中的第一个怎么办?如果条目是唯一的(单个)条目,我不能同时使用这两个条目?
感谢任何人都能给予的帮助.
干杯.
小智 101
有一个棘手的情况.如果我在列表'17,34,400,12'中寻找'40',那么它会找到",40"并返回错误的条目.这将解决所有解决方案:
WHERE (',' + RTRIM(MyColumn) + ',') LIKE '%,' + @search + ',%'
Run Code Online (Sandbox Code Playgroud)
gbn*_*gbn 26
WHERE
MyColumn LIKE '%,' + @search + ',%' --middle
OR
MyColumn LIKE @search + ',%' --start
OR
MyColumn LIKE '%,' + @search --end
OR
MyColumn = @search --single (good point by Cheran S in comment)
Run Code Online (Sandbox Code Playgroud)
Liq*_*aut 12
SELECT * FROM TABLENAME WHERE FIND_IN_SET(@search, column)
Run Code Online (Sandbox Code Playgroud)
如果事实证明您的列在列表项之间有空格,请使用
SELECT * FROM TABLENAME WHERE FIND_IN_SET(@search, REPLACE(column, ' ', ''))
Run Code Online (Sandbox Code Playgroud)
http://dev.mysql.com/doc/refman/5.0/en/string-functions.html
DECLARE @search VARCHAR(10);
SET @search = 'Cat';
WITH T(C)
AS
(
SELECT 'Cat, Dog, Sparrow, Trout, Cow, Seahorse'
)
SELECT *
FROM T
WHERE ', ' + C + ',' LIKE '%, ' + @search + ',%'
Run Code Online (Sandbox Code Playgroud)
这当然需要对每次搜索进行全表扫描.