MySQL-REGEX字符串和匹配词中的搜索词只能是数字或数字

时间:2018-12-19 10:23:28

标签: mysql regex

问题:如果我在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”,则不会返回任何结果。

http://sqlfiddle.com/#!9/acc5c8/2

1 个答案:

答案 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()

这将不返回任何行。