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

MySQL中REGEXP_LIKE匹配多子串报错(1210)的解决方法咨询

问题解决:REGEXP_LIKE参数错误及SQL修正

错误原因分析

  1. REGEXP_LIKE参数使用错误:MySQL中REGEXP_LIKE的语法为REGEXP_LIKE(expr, pattern[, match_type]),你错误地传入了三个参数(列名+两个正则表达式),这不符合函数的参数要求,导致报错Incorrect arguments to regexp_like。
  2. 正则表达式写法错误:^TL,的写法不符合需求,^表示匹配字符串开头,这里不需要强制用逗号分隔,且你的需求是字符串同时包含TL和指定子串,而非开头匹配两个独立模式。
  3. CREATE TABLE语法不完整:你缺少从原表获取Unit_No数据的逻辑,直接在列定义中写计算表达式无法正确加载数据。
  4. 字符串常量格式问题:MySQL中推荐用单引号包裹字符串常量,双引号在部分sql_mode配置下会被识别为表/列名,导致逻辑错误。

修正后的SQL写法

根据你的匹配规则,提供两种可行的修正方案:

方案1:用AND结合多个REGEXP_LIKE(直观易懂)

USE Schema1;
CREATE TABLE table1 AS
SELECT 
    Unit_No,
    CASE
        -- 同时包含TL和A2/A3
        WHEN REGEXP_LIKE(Unit_No, 'TL') AND REGEXP_LIKE(Unit_No, 'A[23]') THEN 'Type 1'
        -- 同时包含TL和VG
        WHEN REGEXP_LIKE(Unit_No, 'TL') AND REGEXP_LIKE(Unit_No, 'VG') THEN 'Type 2'
        -- 同时包含TL和VF
        WHEN REGEXP_LIKE(Unit_No, 'TL') AND REGEXP_LIKE(Unit_No, 'VF') THEN 'Type 3'
        ELSE NULL
    END AS Unit_Type
FROM 你的原表名称; -- 替换为实际存储Unit_No列的表名

方案2:用单个复合正则表达式(更简洁)

结合你的数据格式(TL03-XXX),可以用正则确保字符串以TL开头,同时包含目标子串:

USE Schema1;
CREATE TABLE table1 AS
SELECT 
    Unit_No,
    CASE
        -- 以TL开头且包含A2/A3
        WHEN REGEXP_LIKE(Unit_No, '^TL.*A[23]') THEN 'Type 1'
        -- 以TL开头且包含VG
        WHEN REGEXP_LIKE(Unit_No, '^TL.*VG') THEN 'Type 2'
        -- 以TL开头且包含VF
        WHEN REGEXP_LIKE(Unit_No, '^TL.*VF') THEN 'Type 3'
        ELSE NULL
    END AS Unit_Type
FROM 你的原表名称; -- 替换为实际存储Unit_No列的表名

关键修正点说明

  • 合并A2/A3的匹配逻辑:用A[23]正则可以同时匹配A2和A3,避免重复写两个WHEN条件。
  • 修正函数参数:每个REGEXP_LIKE只传入列名和一个正则表达式,或用AND连接多个REGEXP_LIKE实现多条件匹配。
  • 补全表创建逻辑:通过CREATE TABLE ... AS SELECT从原表读取数据并计算生成新表,确保数据能正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:42:10