在gp数据库中使用正则表达式时需要使用关键字“~”,以表示该关键字之前的内容需匹配之后的正则表达式,若匹配规则不需要区分大小写,可以使用组合关键字“~*”;
相反,若gp数据库正则表达式需要查询不匹配这则表达式的记录,只需在该关键字前加否定关键字“!”即可。若正则表达式包含转义字符,则需在表达式前加关键字“E”。
[[:<:]][[:>:]]
分别匹配一个单词开头和结尾的空的字符串,这个单词开头和结尾都不是包含在alnum中
的字符也不能是下划线。(alnum表示英文字母和数字字符)
mysql>select “a word a” REGEXP “[[:<:]]word[[:>:]]”->1(表示匹配)
mysql>select “a xword a” REGEXP “[[:<:]]word[[:>:]]”->0(表示不匹配)
SELECT * FROM Products WHERE account_id REGEXP '[[:<:]]12[[:>:]]'
表示account_id中匹配"111 12 897"这样的account_id
注意:正则表达式后面需用''括起来,因为正则表达式是针对“文本”的匹配。
正则表达式REGEXP可以理解为可支持更多规则/通配符的LIKE,可以对检索内容进行更强的控制。LIKE本身只能和%及_这两种通配符连接进行粗略的搜索,而REGEXP可以支持更多规则,比如.是和%一样的可匹配任意一个字符的正则模式,[]可匹配一个范围,如REGEXP '[1-5] ton'可以搜索出来1 ton、2 ton、3 ton、4 ton、5 ton。
一些正则模式:
. :匹配任意一个字符,类似于%
| :类似于OR
[] :字符集合,可用|隔开表or选项,也可用-定义范围
[^] :类似于NOT,匹配非[]框内的
定位元字符 :
^ :匹配输入字符串的开始位置【^有两种用法,一种是开始位置,一种和[]连在一起表示NOT】
$ :匹配输入字符串的结束位置
[[:<:]] :词的开始
[[:<:]] :词的结尾
字符类 (预定义的字符集,类似“快捷键”):
重复元字符 :
* :0次或多次匹配
+ :1次或多次匹配(等于{1,})
? :匹配它前面的任何字符0次或1次(等于{0,1})
{n} :指定数目的匹配
{n,} :不少于指定数目的匹配
{n,m} :匹配数目的范围(m不超过255)
正则表达式略复杂,但用好了会非常方便,所以务必把各种正则模式记熟。
关于特殊字符所在位置会造成不同影响,有个小例子:
^[0-9\\.]表示查找以0-9里任意一个数字和“.”开头的字符串
[^0-9\\.]表示除了“0-9.”这个单词外的任意字符串
转义
如果想搜出代表正则模式字符本身,比如想查找“.”,如果直接输REGEXP '.',那么查找出来的将是全部行,因为“.”表示任意字符;又比如想查找“|”,直接输REGEXP '|',那么查找不出结果,因为正则表达式认为这是or的含义,此时需要用到“转义”的功能,即在想查找的特殊字符前输入两条斜杠——“//”,告诉正则表达式现在要查找的是特殊字符本身,而不是它所代表的含义。
另外还有一些在SQL练习中碰到的其他注意事项:
NOT只对单个字段有效,如果想多重否定,需要在每个字段前都加上NOT,比如 WHERE vend_id NOT IN(1002,1003) AND prod_price NOT IN (5.99)
通配符%可以任意长度的字符,包括0字符,但不能匹配出NULL;_只能匹配单个字符。注意尽量少使用通配符,并且尽量不要在开头使用,避免搜索时间过长。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)