看一下代码:
<if test="rangeStart != null and rangeStart != ''">
and (LENGTH(t.column) = LENGTH(REGEXP_REPLACE(t.column, '[^0-9]')) and REGEXP_REPLACE(t.column, '[^0-9]') >=#{rangeStart})
</if>
<if test="rangeEnd != null and rangeEnd != ''">
and (LENGTH(t.column) = LENGTH(REGEXP_REPLACE(t.column, '[^0-9]')) and REGEXP_REPLACE(t.column, '[^0-9]') <=#{rangeEnd})
</if>
REGEXP_REPLACE
REGEXP_REPLACE是一个支持正则的字符串替换函数。只指定前两个参数,即源字符串,和正则表达式,会返回匹配的结果。
比如
select regexp_replace('abc123a4','[^0-9]') from dual;
结果:

LENGTH
LENGTH是一个返回字符串长度的函数
LENGTH(t.column) = LENGTH(REGEXP_REPLACE(t.column, '[^0-9]'))表示原字段值的长度和匹配的数字长度相等,即查询只包含数字的结果。
后面的REGEXP_REPLACE(t.column, '[^0-9]') >=#{rangeStart})是范围查询。

本文介绍如何使用REGEXP_REPLACE函数结合正则表达式和LENGTH函数在数据库中进行精确的数字范围查询,适用于Oracle等数据库环境。
490

被折叠的 条评论
为什么被折叠?



