美好的一天
我有一个字段看起来像
BBB-888-8557ZZV-003.XYZ
BBB-999-8787ZZV-00D.XYZ
我需要找到(并在我确认我的select返回正确的行后替换:))所有与正则表达式匹配的记录:
/-\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
答案 0 :(得分:3)
在限制查询后,您可以使用CONCAT()
功能在输出中获取替换。
SELECT CONCAT(SUBSTRING(pod, 1, LENGTH(pod) - LOCATE('-', REVERSE(pod)) + 1),
'_MARK_D.XYZ')
FROM `track`
WHERE
(
pod LIKE "BBB-999%"
AND pod REGEXP '-[0-9][0-9][A-Z]'
)
出于某种原因,我需要在MySQL正则表达式中使用[0-9]
来使其正常工作。
点击以下链接查看正在运行的演示:
如果您想实际更改pod
列中的值,可以尝试UPDATE
:
UPDATE `track`
SET pod = CONCAT(SUBSTRING(pod, 1, LENGTH(pod) - LOCATE('-', REVERSE(pod)) + 1),
'_MARK_D.XYZ')
WHERE
(
pod LIKE "BBB-999%"
AND pod REGEXP '-[0-9][0-9][A-Z]'
)
答案 1 :(得分:3)
mysql
中的数字与[0-9] or [[: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}'
使用-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}';