其中包含逗号分隔值的列中的值

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)

  • 简单,但是很有帮助。赞成:) (2认同)

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)

  • 我相信当'MyColumn`只有一个元素时,你还需要第四个案例:`...或者MyColumn = @ search` (3认同)

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

  • The question was about SQL Server 2008 which doesn't have that built-in function. (3认同)
  • 优秀解决方案 (2认同)

Mar*_*ith 5

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)

这当然需要对每次搜索进行全表扫描.