Mysql 如何使用包含列值的正则表达式查询行
我有一个表,其中标识符(XXXXX-065-00)应该与一个分区(65)匹配。我想查询所有不匹配的行 下面的SQL似乎可以工作,但是有更好或更有效的方法吗Mysql 如何使用包含列值的正则表达式查询行,mysql,sql,regex,Mysql,Sql,Regex,我有一个表,其中标识符(XXXXX-065-00)应该与一个分区(65)匹配。我想查询所有不匹配的行 下面的SQL似乎可以工作,但是有更好或更有效的方法吗 select id,division,identifier from table where identifier not REGEXP '.....-'+division+'-..' 您可以concat()正则表达式字符串: where identifier not regexp concat('^.{5}-', lpad(divisio
select id,division,identifier from table where identifier not REGEXP '.....-'+division+'-..'
您可以concat()
正则表达式字符串:
where identifier not regexp concat('^.{5}-', lpad(division, 3, '0'), '-..$')
请注意,MySQL中的+
是一个数字加法(它不进行字符串连接,例如在SQL Server中)
其他备注:
- 您可能需要用
s填充'0'
,使其正好有3个字符分区
- 我添加了
/^
以使正则表达式与整个字符串匹配,而不是进行部分匹配,因为这似乎是您想要的$
- 您可以使用量词:
代表{5}
..
lpad(分区,3,'1')
?其中标识符不是regexp concat('^.{5}-',lpad(分区,3,'0'),'-..$)
起了作用。我认为concat最后一部分的+是多余的。分区号的长度都一样吗?如果它们小于3位,前面的数字是否应该是匹配的一部分?除法可以是10到175之间的任何数字,但它们在标识符中表示为010-175(标识符始终具有相同的字符数。)@GMB解决方案应该适合您?