如果列值包含其中的特定字符串,如何返回计数

时间:2017-07-25 05:59:25

标签: sql sql-server tsql

我有一个表有20个不同的列,其中4个用于存储图像名称。

e.g。

img01 = abcdef_X
img02 = jklmno
img03 = tuvxys_X
img04 = awstyt_X 

我可以使用sql查询来返回包含'_X'的这4列的计数????

有可能???

2 个答案:

答案 0 :(得分:3)

假设您要在列中的任何位置找到_X,您可以尝试以下查询:

SELECT COUNT(*)
FROM yourTable
WHERE col LIKE '%[_]X%'

如果要计算四列匹配,其中匹配定义为四列匹配中的任意一列(总可能匹配得分为4),那么您可以尝试:

SELECT
    col1, col2, col3, col4,
    (CASE WHEN col1 LIKE '%[_]X%' THEN 1 ELSE 0 END +
     CASE WHEN col2 LIKE '%[_]X%' THEN 1 ELSE 0 END +
     CASE WHEN col3 LIKE '%[_]X%' THEN 1 ELSE 0 END +
     CASE WHEN col4 LIKE '%[_]X%' THEN 1 ELSE 0 END) AS cnt
FROM yourTable

如果您的示例数据暗示,您只想在字符串末尾匹配此模式,则可以改为使用LIKE '%[_]X

我回答是因为您的问题比上述评论所暗示的要复杂一些,因为您希望将文字下划线与LIKE匹配。在这种情况下,我们可以通过放入方括号来逃避下划线。

答案 1 :(得分:0)

SELECT COUNT(*)
FROM yourTable
WHERE (img01  LIKE '%[_]X%') or (img02 LIKE '%[_]X%') or (img03 LIKE '%[_]X%') or (img04  LIKE '%[_]X%')

如果你想确保所有列的字符串都使用AND而不是OR