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

如何使用SQL从指定字符串中提取YES或NO字符?

解决方案

1. MySQL/MariaDB

使用REGEXP_SUBSTR匹配@符号前的YES或NO:

SELECT REGEXP_SUBSTR(column_name, '(YES|NO)(?=@)') AS target_value FROM your_table;

如果数据库版本不支持正向断言,可改用字符串定位函数组合:

SELECT SUBSTRING(
    column_name,
    LOCATE('^', column_name, LOCATE('@', column_name) - 5) + 1,
    LOCATE('@', column_name) - LOCATE('^', column_name, LOCATE('@', column_name) - 5) - 1
) AS target_value FROM your_table;

2. PostgreSQL

利用正则匹配提取目标片段:

-- 方式1:捕获分组提取
SELECT (REGEXP_MATCH(column_name, '^.*\^(YES|NO)@.*$'))[2] AS target_value FROM your_table;
-- 方式2:直接匹配目标值
SELECT REGEXP_SUBSTR(column_name, 'YES|NO(?=@)') AS target_value FROM your_table;

3. SQL Server

通过PATINDEX定位或字符串反转拆分实现:

-- 方式1:定位匹配
SELECT SUBSTRING(
    column_name,
    PATINDEX('%[^][YESNO]@%', column_name) + 1,
    CASE WHEN PATINDEX('%YES@%', column_name) > 0 THEN 3 ELSE 2 END
) AS target_value FROM your_table;

-- 方式2:反转拆分(SQL Server 2017+)
SELECT STRING_AGG(value, '') AS target_value
FROM STRING_SPLIT(REVERSE(SUBSTRING(REVERSE(column_name), CHARINDEX('@', REVERSE(column_name)) + 1, 5)), '^')
WHERE value IN ('YES', 'NO');

原正则表达式失效原因

你之前使用的Regexp(column_name,[^^|],1,4)逻辑错误:该表达式是匹配非^/|的字符并截取前4位,完全没有定位到YES/NO所在的^与@之间的位置,因此无法提取目标值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:17:07