美好的一天
我有一个看起来像行的字段
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)
中的数字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)
更新字段-00[A-Z].XYZ有-MARK[A_Z].XYZ
\-[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)