问题:如果我在where子句中传递了任何单词,则仅当传递的单词为alnum或num时才应使用mysql regex返回查询。
我有一个地址表。
address table
--------------------
id | name
--------------------
1 | 123 demo
--------------------
2 | 1st demo
--------------------
3 | 123
--------------------
4 | demo
示例1
SELECT * FROM address WHERE name regexp '(^|[[:space:]])123([[:space:]]|$)'
结果:第1,3行应返回。它对我有用
示例2
SELECT * FROM address WHERE name regexp '(^|[[:space:]])1st([[:space:]]|$)'
结果:第2行应返回。它对我有用
示例3
SELECT * FROM address WHERE name regexp '(^|[[:space:]])demo([[:space:]]|$)'
结果:它不应返回任何行。但返回1,2,4行
最终:因此,如果我在where子句中传递“ demo”,则不会返回任何结果。
答案 0 :(得分:1)
我想推荐这样的单词边界语法:<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
http://sqlfiddle.com/#!9/d63e05/1
老实说,如果这是我的项目,那么我将先进行REGEXP '[[:<:]]demo[[:>:]]'
检查搜索值,然后再去数据库旅行。但是,您的要求是:
仅当传递的单词为数字或仅使用mysql regex的数字时
为确保查询中的针串至少包含一个数字,请在WHERE子句中添加另一个检查。
更具体地说...
ctype_alnum()
这将不返回任何行。