首页 > 解决方案 > 如何使用包含列值的正则表达式查询行

问题描述

我有一个表,其中标识符(XXXXX- 065 -00)应该匹配一个部门(65)。我想查询所有不匹配的行。

下面的 SQL 似乎可以工作,但是有没有更好或更有效的方法呢?

select id,division,identifier from table where identifier not REGEXP '.....-'+division+'-..'

标签: mysqlsqlregex

解决方案


您可以concat()使用正则表达式字符串:

where identifier not regexp concat('^.{5}-', lpad(division, 3, '0'), '-..$')

请注意,在 MySQL+中是数字加法(它不进行字符串连接,例如在 SQL Server 中)。

其他备注:

  • 你可能需要division'0's 填充它,所以它正好有 3 个字符

  • 我添加^/$以使正则表达式匹配整个字符串而不是进行部分匹配,因为这似乎是您想要的

  • 你可以使用量词:.{5}代表.....


推荐阅读