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

标签 mysql sql

美好的一天

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

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}'

sql fiddle demo

使用 -MARK[A_Z].XYZ

更新具有 -00[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}';

sql fiddle demo

关于mysql - 为什么这个正则表达式查询没有返回任何结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34282342/

相关文章:

php - Cakephp 外键 ID 设置不正确

mysql - 编码的字节序列无效 "UTF8": 0xed 0xa0 0xbd

php - 使用按位运算符的不同模块的用户角色权限

sql - T-sql 查询以 CSV 格式输出值

mysql - SQL中两个组成行的一列之间的区别

mysql - 获取主文件日志(MySQL 复制)中的最后位置?

php - 如何防止 PHP 中的 SQL 注入(inject)?

sql - 我的 SQLite 语法错误

sql - 如果我的数据库列有很多空值,为什么我不应该在它上面使用索引?

java - 配置查询特定情况