美好的一天
我有一个字段,其中的行看起来像
BBB-888-8557ZZV-003.XYZ
BBB-999-8787ZZV-00D.XYZ
我需要查找(并在确认我的选择返回正确的行后替换:))所有与正则表达式匹配的记录:
/-\d\d[A-Z]/g
因此所有字段都带有减号后跟两位数字后跟字母。
我也只需要过滤掉其中包含 999 的字段。
我尝试了以下 SQL,但没有返回任何结果:
SELECT *
FROM `track`
WHERE (
pod LIKE "BBB-999%"
AND pod
REGEXP '/-\d\d[A-Z]/g'
)
此外,一旦发现所有这些字段,将快速替换所有这些字段的原因是:
BBB-999-8787ZZV-_MARK_D.XYZ
最佳答案
mysql
中的数字应该像 [0-9] 或 [[:digit:]]
\d
不会像您预期的那样工作。 link
尝试;
SELECT *
FROM `track`
WHERE
pod LIKE "BBB-999%" and
pod REGEXP '\-[0-9]{2}[A-Z]{1}'
或
SELECT *
FROM `track`
WHERE
pod LIKE "BBB-999%" and
pod REGEXP '\-[[:digit:]]{2}[A-Z]{1}'
使用 -MARK[A_Z].XYZ
更新具有 -00[A-Z].XYZ
的字段>
- 然后字符串的长度是变化的(来自评论)
- 最后 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}';
关于mysql - 为什么这个正则表达式查询没有返回任何结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34282342/