sql正则表达式:SQL中的正则表达式

本文深入探讨了SQL查询语句中正则表达式的应用,包括如何匹配字符串的开始、结束、任何字符以及特殊字符,并提供了实际示例。重点介绍了正则表达式的语法和在不同字段类型(如smallint、int、varchar)中的使用场景。
摘要由CSDN通过智能技术生成

sql正则表达式:SQL中的正则表达式

SQL的查询语句中,有时会需要引进正则表达式为其复杂搜索指定模式。下面给出一些RegexpMYSQL语句中应用(非全部):
1
^  匹配字符串的开始部分。
mysql> SELECT 'fo/nfo' REGEXP '^fo$'; -> 0mysql> SELECT 'fofo' REGEXP '^fo'; -> 12

 $     匹配字符串的结束部分。
mysql> SELECT 'fo/no' REGEXP '^fo/no$'; -> 1mysql> SELECT 'fo/no' REGEXP '^fo$'; -> 03

 .   匹配任何字符(包括回车和新行)。
mysql> SELECT 'fofo' REGEXP '^f.*$'; -> 1mysql> SELECT 'fo/r/nfo' REGEXP '^f.*$'; -> 14

[:character_class:]
在括号表达式中(使用[]),[:character_class:]表示与术语类的所有字符匹配的字符类。标准的类名称是:
alnum
    文字数字字符
alpha
     文字字符
blank
     空白字符
cntrl
      控制字符
digit
      数字字符
graph
     图形字符
lower
     小写文字字符
print
      图形或空格字符
punct
     标点字符
space
    空格、制表符、新行、和回车
upper
    大写文字字符
xdigit
     十六进制数字字符
它们代表在ctype(3)手册页面中定义的字符类。特定地区可能会提供其他类名。字符类不得用作范围的端点。
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+'; -> 1
mysql> SELECT '!!' REGEXP '[[:alnum:]]+'; -> 0
5
[[:<:]], [[:>:]]
这些标记表示word边界。它们分别与word的开始和结束匹配。word是一系列字字符,其前面和后面均没有字

字符。字字符是alnum类中的字母数字字符或下划线(_)
mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]'; -> 1mysql> SELECT 'a xword a' REGEXP
'[[:<:]]word[[:>:]]'; -> 0
要想在正则表达式中使用特殊字符的文字实例,应在其前面加上2个反斜杠“/”字符。
MySQL
解析程序负责解释其中一个,正则表达式库负责解释另一个。例如,要想与包含特殊字符“+”的字符
“1+2”匹配,在下面的正则表达式中,只有最后一个是正确的:
mysql> SELECT '1+2' REGEXP '1+2'; -> 0mysql> SELECT '1+2' REGEXP '1/+2'; -> 0mysql> SELECT
'1+2' REGEXP '1//+2'; -> 1
其他的有关Regexp的语法,可直接参考下表:字符 含意
/
做为转意,即通常在"/"后面的字符不按原来意义解释,如/b/匹配字符"b",当b前面加了反斜杆后//b/,转意
为匹配一个单词的边界。
-
-
对正则表达式功能字符的还原,如"*"匹配它前面元字符0次或多次,/a*/将匹配a,aa,aaa,加了"/"后,/a/*/

只匹配"a*"
^
匹配一个输入或一行的开头,/^a/匹配"an A",而不匹配"An a"
$
匹配一个输入或一行的结尾,/a$/匹配"An a",而不匹配
"an A"
*
匹配前面元字符0次或多次,/ba*/将匹配
b,ba,baa,baaa
+
匹配前面元字符1次或多次,/ba*/将匹配
ba,baa,baaa
?
匹配前面元字符0次或1次,/ba*/将匹配
b,ba
(x)
匹配x保存x在名为$1...$9的变量中

x|y
匹配xy
{n}
精确匹配n

{n,}
匹配n次以上
{n,m}
匹配n-m
[xyz]
字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz]
不匹配这个集合中的任何一个字符

[/b]
匹配一个退格符
/b
匹配一个单词的边界
/B
匹配一个单词的非边界
/cX
这儿,X是一个控制符,//cM/匹配Ctrl-M
/d
匹配一个字数字符,
//d/ = /[0-9]/
/D
匹配一个非字数字符,
//D/ = /[^0-9]/
/n
匹配一个换行符

/r
匹配一个回车符
/s
匹配一个空白字符,包括/n,/r,/f,/t,/v
/S
匹配一个非空白字符,等于/[^/n/f/r/t/v]/
/t
匹配一个制表符

/v
匹配一个重直制表符
/w
匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[/w]匹配
"$5.98"
中的5,等于[a-zA-Z0-9]
/W
匹配一个不可以组成单词的字符,如[/W]匹配"$5.98"中的$,等于[^a-zA-Z0-9]

1smallint类型字段gender限定01 gender<=1

 2int类型字段age限定范围: age > 10 and age < 100

 3varchar类型字段限定范围: · 限定长度为1且只能为字母的字符串FlagCodeFlagCode like '[a-z]' · 6位数字邮编ZipCode ZipCode like '[0-9][0-9][0-9][0-9][0-9][0-9]'

 4、用户名UserName必须以用户序号UserId打头:    left(UserName,len(UserId))=UserId

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值