1.A like B只能使用简单匹配符号 _%,”_”表示任意单个字符,字符”%”表示任意数量的字符
2.like的匹配是按字符逐一匹配的,使用B从A的第一个字符开始匹配,所以即使有一个字符不同都不行。
2.操作类型: strings
3.使用描述: 如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合表达式B 的正则语法,则为TRUE;否则为FALSE。LIKE主要进行简单正则匹配。
4.案例演示:'foobar'LIKE'foo'的值为FALSE,而'foobar'LIKE'foo___'的值为TRUE, 'foobar'LIKE'foo%'的值为TRUE。要转义%,请使用\(%匹配一个%字符)。如果数据包含分号,你想匹配它,则需要转义,像'a\;b'5.注意事项:否定比较时候用NOT A LIKE B(使用A NOT LIIKE B也可以),结果与like的结果时相对的。
SQL语法
hive>select1from test where'abcde'like'abc';--匹配成功1
hive>select1from test where'abcde'like'b'--匹配失败,左边第一个字母是a
hive>select1from test where'football'like'foot%';1
hive>select1from test where'football'like'foot____';
rlike
1.语法规则:
A RLIKE B ,B中的表达式可以使用JAVA中全部正则表达式,具体正则规则参考java,或者其他标准正则语法。
2.操作类型: strings
3.使用描述: 如果字符串A或者字符串B为NULL,则返回NULL;如果字符串A符合JAVA正则表达式B的正则语法,则为TRUE;否则为FALSE。
hive>select1from test where'footbar’ rlike '^f.*r$’;1
hive >select1from test where'foobar'rlike'foo'--等价于;'foobar' rlike '^f.*r$'1
注意:判断一个字符串是否全为数字:
hive>select1from test where'123456'rlike'^\\d+$';1
hive>select1from test where'123456aa'rlike'^\\d+$';
NOT A LIKE B 与 A NOT LIKE B
not..like是like的否定用法,如果like匹配结果时true,则not..like的匹配结果时false,反之也是结果也是相对
hive>select1from test whereNOT'football'like'fff%';1
hive>select1from atest where'football'notlike'fff%';1
hive>select1from test where'football'like'fff%';
like与rlike,not like,like not的使用对比总结
1.Rlike功能和like功能一致,只是like是后面只支持简单表达式匹配(_%),而rlike则支持标准正则表达式语法。所以如果正则表达式使用熟练的话,建议使用rlike,功能更加强大。所有的like匹配都可以被替换成rlike。反之,则不行。注意事项:like是从头逐一字符匹配的,但是rlike则不是。
hive>select('foobar'like'oo')from t;--like从头匹配的false
hive>select('foobar'rlike'oo')from t;--rlike使用正则,不是从头匹配true2.NOT A LIKE B是LIKE的结果否定,如果like匹配结果时true,则not..like的匹配结果时false,反之也是结果也是相对。实际中也可以使用 A NOTLIKE B,也是LIKE的否定,与 NOT A LIKE B一样
3.同理NOTRLIKE 的使用,也是NOT A RLIKE B是对RLIKE的否定。