Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何使用包含列值的正则表达式查询行_Mysql_Sql_Regex - Fatal编程技术网

Mysql 如何使用包含列值的正则表达式查询行

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

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

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

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中)

其他备注:

  • 您可能需要用
    '0'
    s填充
    分区
    ,使其正好有3个字符

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

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


如果分区是150而不是050,是否有一种方法可以“松散地”填充分区?@HLD:
lpad(分区,3,'1')
其中标识符不是regexp concat('^.{5}-',lpad(分区,3,'0'),'-..$)
起了作用。我认为concat最后一部分的+是多余的。分区号的长度都一样吗?如果它们小于3位,前面的数字是否应该是匹配的一部分?除法可以是10到175之间的任何数字,但它们在标识符中表示为010-175(标识符始终具有相同的字符数。)@GMB解决方案应该适合您?