You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL查询中匹配LIKE条件时返回对应匹配值列?

嘿,这个需求我碰到过好几次,给你两种实用的解决办法:

解决方案

方案一:用CASE WHEN逐个判断(最直观通用)

这种方法适合你现在固定几个匹配值的场景,逻辑清晰,几乎所有SQL数据库都支持:

SELECT 
    *,
    CASE
        WHEN pb_results.winning_numbers LIKE '%130736%' THEN '130736'
        WHEN pb_results.winning_numbers LIKE '%130737%' THEN '130737'
        WHEN pb_results.winning_numbers LIKE '%130738%' THEN '130738'
    END AS matched_value
FROM pb_results
WHERE pb_results.winning_numbers LIKE '%130736%' 
   OR pb_results.winning_numbers LIKE '%130737%' 
   OR pb_results.winning_numbers LIKE '%130738%';

说明:CASE语句会按顺序检查每个条件,只要匹配到第一个符合的规则,就返回对应的字符串作为matched_value列的值。如果某一行的winning_numbers同时包含多个目标值(比如既有130736又有130737),只会返回第一个匹配到的那个值——如果需要显示所有匹配值,那得额外处理,不过从你的需求描述看,应该不需要这种情况。

方案二:用正则表达式简化(适合有规律的匹配值)

如果你的数据库支持正则表达式(比如MySQL、PostgreSQL、SQL Server 2017+等),可以用正则来简化代码,尤其是当匹配值有规律的时候(比如你这里是130736-130738,连续的数字):

以MySQL为例:

SELECT 
    *,
    REGEXP_SUBSTR(winning_numbers, '13073[6-8]') AS matched_value
FROM pb_results
WHERE winning_numbers REGEXP '13073[6-8]';

以PostgreSQL为例:

SELECT 
    *,
    (REGEXP_MATCHES(winning_numbers, '13073[6-8]'))[1] AS matched_value
FROM pb_results
WHERE winning_numbers ~ '13073[6-8]';

说明:正则表达式13073[6-8]会匹配130736、130737、130738这三个值,然后通过对应的正则函数提取出匹配到的内容。同样,如果一行有多个匹配,只会返回第一个。

内容的提问来源于stack exchange,提问作者Mehtab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:44:59