【问题标题】:Is it possible in sql to group by fields matching some pattern?是否可以在 sql 中按匹配某些模式的字段进行分组?
【发布时间】:2010-07-28 10:49:05
【问题描述】:

SQL 中是否可以按LIKE 模式进行分组?我想实现这样的目标:

id|名称
1 |麦克风
2 |鲍勃
3 |账单
4 |爱丽丝

然后进行如下查询:SELECT name from users group by _pattern_
例如,我想通过匹配模式 'B*'、'*l*' 和 'Mike' 来获取组 会给出输出:

乙* |鲍勃 |账单 *l* |账单 |爱丽丝 迈克|麦克风

【问题讨论】:

    标签: sql sql-like


    【解决方案1】:
    Select 'B*' as Mask, Name
    from Table
    WHERE Name like 'B%'
    UNION ALL
    Select '*l*' as Mask, Name
    from Table
    WHERE Name like '%l%'
    UNION ALL
    Select 'Mike' as Mask, Name
    from Table
    WHERE Name like 'Mike'
    

    【讨论】:

      【解决方案2】:

      如果您希望同一条记录根据其匹配的模式多次出现,您应该使用多个带有相关过滤器的SELECT 语句和UNION 一起使用..

      【讨论】:

        【解决方案3】:

        您可以查询集合结构中的模式,然后使用 GROUP BY 或 DISTINCT 来删除重复数据,下面是 MSSQL CTE 的一种方式(临时表/表变量也可以);

        with match (pattern) as (
                  select 'B%'
            union select '%l%' 
            union select 'Mike' 
        )
        select
            pattern,
            name
        from TABLE, match where TABLE.name like match.pattern
        group by pattern, name
        
        ==
        %l%     Alice
        %l%     Bill
        B%      Bill
        B%      Bob
        Mike    Mike    
        

        【讨论】:

          猜你喜欢
          • 2016-08-08
          • 1970-01-01
          • 1970-01-01
          • 2012-12-03
          • 1970-01-01
          • 2016-11-12
          • 1970-01-01
          • 2020-09-11
          • 2023-03-16
          相关资源
          最近更新 更多