2017-07-25 67 views
0

我有一个包含20个不同列的表,其中4个用于存储图像名称。如何在列值包含特定字符串的情况下返回计数

例如

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

我能得到的SQL查询返回包含在它的_X“这4列的计数????

是否有可能?

+0

是的,但我想在4个不同的列执行它与返回的计数 – ace

回答

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。在这种情况下,我们可以通过放入方括号来避免下划线。

+0

是有可能写在4个不同的列相同的查询,或者我只是我必须写WHERE col1 like ..,col2 like ..,col3 like .. – ace

+0

你想要准确计算什么?如果四列中的一列匹配,我们如何计算这一点? –

+0

是的这就是我说如果四个匹配中的一个'_X'我可以返回计数为1 ?? – ace

0
SELECT COUNT(*) 
FROM yourTable 
WHERE (img01 LIKE '%[_]X%') or (img02 LIKE '%[_]X%') or (img03 LIKE '%[_]X%') or (img04 LIKE '%[_]X%') 
如果你想确保所有列

有串theen使用,取而代之的或

+0

为什么如果有2列包含'_X',它会返回计数为1? – ace

+0

列是两个,但行是1我猜计数funcionality剂量计数列它计数行 –

相关问题