--------------------------------------------------------- 小路原创 ------------------------------------------------
通过运算符的使用可以获取另外含义的数据。
一、算术运算符
+、-、*、/(div)、%(mod)
example:
use school;
select
10 + 5 加法,
10 - 5 减法,
10 * 5 乘法,
10 / 5 除法,
10 % 5 取模;
二、比较运算符
>、<、=(<=>)、!=(<>)、>=、<=、between and、is null、in、like、regexp(正则表达式)
正则表达式:
^:匹配字符串的开始部分
$:匹配字符串的结束部分
.:匹配字符串中的任意一个字符
[字符集合]:匹配字符集合中的任意一个字符
[^字符集合]:匹配字符集合外的任意一个字符
str1|str2|str2:匹配str1/str2/str3中的任意一个字符串
*:匹配字符,包含0个或多个 {0,}
+:匹配字符,至少包含一个 {1,}
?: 匹配字符,0个或1个 {0,1}
字符串{N}:字符串连续出现N次
字符串{M,N}:字符串出现至少M次,最多N次,实际发现只要出现连续的次数>=M就返回1。0<=M<N<=255
比较结果返回1或者0。
example:
--
注意:这里说的字符的前面是指紧挨着这个字符的前面。
select
'cjdxjky' regexp '^c' c字符开头, -->1
'cjdxjky' regexp '^cjdx' cjdx字符串开头, -->1
'cjdxjky' regexp 'y$' y字符结尾, -->1
'cjdxjky' regexp 'jky$' jke字符串结尾, -->1
'cjdxjky' regexp '[abc]' 是否包含字符abc中的一个, -->1
'cjdxjky' regexp '[a-zA-Z]' 包含指定字符集合区间中的字符,-->1
'cjdxjky' regexp '[^abc]' 包含指定字符外字符, -->1
'cjdxjky01234' regexp '[^a-zA-Z0-9]' 包含指定字符集合区间外的字符,-->0
'jcccdxjxjdky1234' regexp 'c*d' d之前有0个或者多个c, -->1
'jkyhkhhk' regexp '(hk)*' 有0个或多个hk, -->1
'jdxyjkcy' regexp 'c+y' y之前至少包含一个c, -->1
'jkkyjx' regexp 'jk?y' jy之间有0个或1个k, -->0
'cjdxjkyjkkkky' regexp 'jky' 指定单个字符串, -->1
'cjdxjkyjky' regexp 'xxx|cjd' 指定多个字符串; -->1
--下面的例子j{2}说明只要字符串中出现大于等于2次连续的j就返回1,连续出现j的次数小于2次返回0。
--cj{1,2}说明只要出现连续的cj一次或者多余一次就返回1,2不起作用,否则返回0。
select
'cjdxjkyjky1234' regexp 'j{3}' 匹配3个连续j, -->0
'cccjjjdxd' regexp 'j{2}' 匹配2个连续j, -->1
'cjcjcjcjcjcjkyky1234' regexp '(cj){1,2}' 匹配连续cj至少一次, -->1
'cjcjcxdxcxdx' regexp 'cj{2}' c后面至少连续出现2次j; -->0
三、逻辑运算符
and(&&) 、or(||)、not(!) 、 xor 、
1、and:所有操作数不为0且不为null时返回1,只要存在一个0就返回0,没有0且只要有一个null就返回null。
example:
select
3 and 2 不存在0和null, -->1
0 and 5 存在0不存在null, -->0
null and 3 存在null不存在0, -->null
null && 4 && 0 存在0且存在null, -->0
null and null 只有null; -->null
2、or:所有操作数中存在一个操作数不为0就返回1,所有操作数都是0或者null,返回null,所有操作数都是0返回0。
example:
select
3 or 4 不存在0和null, -->1
0 or 0 只有0, -->0
0 or 1 or 3 存在0不存在null, -->1
1 or null or 2 存在null不存在0, -->1
2 or 0 || null 存在null且存在0, -->1
0 || null 只有0和null; -->null
3、!(not):如果操作数是非零数字返回0,如果操作数是0返回1,如果操作数是null返回null。
select
not null 非null,
! null 非null,
! 2 非2,
! 0 非0;
4、xor:从左往右异或,如果两个操作数一个是非0一个是0返回1,如果两个数同时是1或者同时是0返回0。存在null时返回null。
select
4 xor 8 两个非0数字异或, -->0
8 xor 0 xor 0 含有两个0和一个非0数字异或, -->1
null xor null 两个null异或, -->null
0 xor null 0和null异或, -->null
3 xor null 非0数和null异或; -->null
四、位运算符
&、| 、~ 、^ 、 << 、>>
select
5&6 , -->4
bin(5&6), -->100
5|6, -->7
bin(5|6), -->111
~1, -->18446744073709551614
bin(~1),
-->1111111111111111111111111111111111111111111111111111111111111110(MySQL用8个字节保留常量)
4^5, -->1
bin(4^5), -->1
5<<2, -->20(左移扩大)
bin(5<<2), -->10100
5>>2, -->1(右移缩小)
bin(5>>2); -->1
--------------------------------------------------------- 小路原创 ------------------------------------------------