REGEXP_LIKE多个子字符串与MySQL的case列完全匹配

mv1qrgav  于 2022-11-21  发布在  Mysql
关注(0)|答案(1)|浏览(879)

我有一个列包含:
| 单位_编号|
| - -|
| TL 03-A21型号|
| TL 03-A31型号|
| TL03-VG1|
| TL03-VF1|
现在,我将创建一个表,其中包含使用regexp_like
我需要使用这个函数来匹配字符串中的两个子字符串,即

  • 当存在TL和A2时,则类型1
  • 当TL和A3存在时,则类型1
  • 当存在Tl和VG时,则类型2
  • 当存在Tl和VF时,则类型3

我尝试了以下方法,但无效
使用方案1;创建表表1(

Unit_Type varchar(200)
AS 
(case
      when REGEXP_LIKE (Unit_No,'^TL,','^A2') THEN "Type 1"
when REGEXP_LIKE (Unit_No,'^TL,','^A3') THEN "Type 1"
when REGEXP_LIKE (Unit_No,'^TL,','^VG') THEN "Type 2"
when REGEXP_LIKE (Unit_No,'^TL,','^VF') THEN "Type 3"
else Null
end);

因此,每当我执行时,它都会正确执行,然后当我尝试加载数据时,它会出现以下错误:“错误代码:1210. regexp_like 0.000秒的参数不正确”
知道怎么解决吗?

6yjfywim

6yjfywim1#

REGEXP_LIKE只接受两个参数。您要传递三个参数。您需要对两个条件进行AND运算
此外,^表示“字符串的开头”,因此您的^A3永远不会匹配,因为它永远不会位于字符串的开头。
每个^TL后面都多了一个逗号。
所以试试这个:

when REGEXP_LIKE(Unit_No,'^TL') AND REGEXP_LIKE(Unit_No,'A3') THEN "Type 1"

同样,如果TL后面总是有两位数,那么可以

when REGEXP_LIKE(Unit_No,'^TL\d\d-A3') THEN "Type 1"

因为\d是任意一位数。

相关问题