mysql - 如何使用包含列值的正则表达式查询行
问题描述
我有一个表,其中标识符(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 中)。
其他备注:
你可能需要
division
用'0'
s 填充它,所以它正好有 3 个字符我添加
^
/$
以使正则表达式匹配整个字符串而不是进行部分匹配,因为这似乎是您想要的你可以使用量词:
.{5}
代表.....
推荐阅读
- android - 我的应用程序在 Android 11 上崩溃:okhttp3.OkHttpClient 处的 java.lang.ExceptionInInitializerError
- node.js - nodejs中的异步foreach和mongoose
- .net - .NET 串行 TCP 类
- svg - 我怎样才能顺利地扩展一个半圆?
- android - OnCnangeMethod My HomeFragment 中返回的实时数据
- reactjs - 如何使用 Material-UI 将表单数据发布到 API
- f# - F# 将字符串拆分为元组的最简单方法
- database - 为什么我不能在我的开关盒中使用我的投影场?
- reactjs - 如何正确将 react localStorage 转换为 react-native asyncStorage?
- python - 结合使用 map 和 lower 函数