首页 > 解决方案 > SQL 中使用类似通配符的通配符

问题描述

我有 3 个类别:

  1. 快乐的
  2. 伤心
  3. 快乐+悲伤
Id  Code
 1  03FJ
 1  03JO
 3  03PR
 4  03OY
 4  036X
 4. 03JX

当代码类似于 '%03J' 但没有任何其他 '%03' 值时,它很高兴。
当代码类似于 '%03' 但没有任何 '%03J' 值时,这很可悲。
当代码像 '%03' 并且有其他 '%03J' 值时,它是快乐 + 悲伤

上面的预期输出将是

Id Emotion
1  Happy
3  Sad
4. Happy + Sad

我怎样才能做到这一点?当通配符基本相同时,我不确定如何捕获它。

标签: sqlsql-serverwildcard

解决方案


您可以使用聚合。最新版本的 SQL Server 支持concat_ws()

select id,
       concat_ws(' + ',
                 (case when sum(case when code like '%03%J%' then 1 else 0 end) > 0
                       then 'Happy'
                  end),
                 (case when sum(case when code not like '%03%J%' then 1 else 0 end) > 0
                       then 'Sad'
                  end)
                 ) as emotion
from t
group by id;

您可以使用case表达式或其他方法在旧版本的 SQL Server 中执行类似的操作。


推荐阅读