为什么这个正则表达式查询没有返回任何结果?

Let*_*rus 6 mysql sql

美好的一天

我有一个看起来像行的字段

BBB-888-8557ZZV-003.XYZ
BBB-999-8787ZZV-00D.XYZ
Run Code Online (Sandbox Code Playgroud)

我需要找到(并在我确认我的select返回正确的行后替换:))所有与正则表达式匹配的记录:

/-\d\d[A-Z]/g
Run Code Online (Sandbox Code Playgroud)

因此,所有具有减号的字段后跟两个数字后跟一个字母.

我还只需要过滤掉其中包含999的字段.

我尝试了以下SQL但它没有返回任何结果:

SELECT * 
FROM  `track` 
WHERE (
pod LIKE  "BBB-999%"
AND pod
REGEXP  '/-\d\d[A-Z]/g'
)
Run Code Online (Sandbox Code Playgroud)

此外,一旦发现以下内容,将更新所有这些字段的快速原因:

BBB-999-8787ZZV-_MARK_D.XYZ
Run Code Online (Sandbox Code Playgroud)

Pra*_*een 3

中的数字mysql应该像[0-9] or [[:digit:]]
\d不会按您预期的那样进行匹配。 关联

尝试;

SELECT * 
FROM  `track` 
WHERE
pod LIKE  "BBB-999%" and
pod REGEXP  '\-[0-9]{2}[A-Z]{1}'
Run Code Online (Sandbox Code Playgroud)

或者

SELECT * 
FROM  `track` 
WHERE
pod LIKE  "BBB-999%" and
pod REGEXP  '\-[[:digit:]]{2}[A-Z]{1}'
Run Code Online (Sandbox Code Playgroud)

sql 小提琴演示

更新字段-00[A-Z].XYZ-MARK[A_Z].XYZ

  1. 那么字符串的长度是变化的(来自评论)
  2. 最后 8 个字符可以是\-[0-9]{3}.XYZ\-[0-9]{2}[A-Z]{1}.XYZ

尝试:

UPDATE `track`
SET `pod` = concat(reverse(substr(reverse( `pod` ) from 8)), 'MARK', substr( `pod`  from -5)) 
WHERE
`pod` LIKE  "BBB-999%" and
`pod` REGEXP  '\-0{2}[A-Z]{1}';
Run Code Online (Sandbox Code Playgroud)

sql 小提琴演示