Mysql 为什么这个regexp查询不返回任何结果?

Mysql 为什么这个regexp查询不返回任何结果?,mysql,sql,Mysql,Sql,你好 我有一个字段,它的行看起来像 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 RE

你好

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

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

在对查询进行限制后,可以使用
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 `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]'
)

mysql
中的数字应该像
[0-9]或[[:digit:][code>
\d
无法按预期工作

尝试

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

  • 然后字符串的长度会发生变化(根据注释)
  • 最后8个字符可以是
    \-[0-9]{3}.XYZ
    \-[0-9]{2}[A-Z]{1}.XYZ
  • 尝试:


    我现在可以用了。诀窍是使用
    [0-9]
    表示正则表达式中的任何数字。请尝试使用SQL Fiddle来说服自己。您好@tim biegeleisen,感谢这项工作正在进行,我如何替换实际表中的select找到的值,而不仅仅是将其显示在输出中?感谢Praveen,这项工作100%有效。我现在如何将所有00[A-Z]匹配项替换为_MARK_[A-Z]在表中?Is
    pod
    值是具有
    xxx-xxx-xxxxxxx-xxx的固定长度数据。xxx
    模式??您好,不,不是。它总是以BBB-999开头,然后是数字和字母的组合,后跟'\-[0-9]{3}'或'\-[0-9]{2}[a-Z]{1}',然后是.XYZ我需要用MARK Hope替换regexp找到的所有00,这很有意义:)我已经给了你一个解决方案,可以处理任意长度的字符串。如果有机会,请看一看,谢谢。
    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}'
    
    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}';