MySQL-常用函数

时间:2022-01-06 02:54:22

一、操作符优先级

展示了所有操作符的执行优先级,从高到低,同一行中的操作符优先级相同,相同优先级的情况下则从左到右执行

MySQL-常用函数

如果想改变优先级执行顺序,则可以使用括号:

mysql> SELECT 1 2*3;  #7
mysql> SELECT (1 2)*3;#9

二、对比操作符

#对比操作符的执行结果为true,false,null三种
Between A and B 	#代表检查值是否在A和B之间
Coalesce()			#代表返回第一个非Null的值
=					#代表相等操作符
>					#代表大于操作符
>=					#代表大于等于操作符
Greatest()			#代表返回最大的值
In()				#代表检查值是否在一系列的值之中
Interval()			#代表返回比第一个参数小的参数的位置
is/is not			#代表检查值是否与布尔值相同/不同
Is not null			#代表检查值是否是非NULL
Is null				#代表检查值是否是NULL
Isnull()			#代表检查参数是NULL
Least()				#代表返回最小的参数
<					#代表小于操作符
<=					#代表小于等于操作符
Like				#代表字符匹配
Not between A and B	#代表检查值是否不在A和B的范围之内
!=/<>				#代表不等于操作符
Not in()			#代表检查值是否不在一系列值的当中
Not like			#代表检查值是否不匹配
Strcmp()			#对比两个字符串
-----------------------------------------------------------------------------------------
#=号对比操作符
mysql> SELECT 1 = 0;  #0
mysql> SELECT ‘0‘ = 0; #1
mysql> SELECT ‘0.0‘ = 0;  #1
mysql> SELECT ‘0.01‘ = 0; #0
mysql> SELECT ‘.01‘ = 0.01; #1


#<>/!=号对比操作符
mysql> SELECT ‘.01‘ <> ‘0.01‘; #1
mysql> SELECT .01 <> ‘0.01‘;  #0
mysql> SELECT ‘zapp‘ <> ‘zappp‘; #1


#<=小于等于对比操作符
mysql> SELECT 0.1 <= 2;  #1
 
#<小于对比操作符
mysql> SELECT 2 < 2;   #0

#>=大于等于对比操作符
mysql> SELECT 2 >= 2; #1

#>大于对比操作符
mysql> SELECT 2 > 2; #0


#is操作符
mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;  #1, 1, 1

#Is not操作符
mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;  #1, 1, 0

#Is null对比操作符
mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL; #0, 0, 1

#Is not null对比操作符
mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;  #1, 1, 0

#Expr between min and max对比操作符
#相当于min <= expr AND expr <= max
mysql> SELECT 2 BETWEEN 1 AND 3, 2 BETWEEN 3 and 1;  #1, 0
mysql> SELECT 1 BETWEEN 2 AND 3; #0
mysql> SELECT ‘b‘ BETWEEN ‘a‘ AND ‘c‘; #1
mysql> SELECT 2 BETWEEN 2 AND ‘3‘; #1
mysql> SELECT 2 BETWEEN 2 AND ‘x-3‘; #0

#expr NOT BETWEEN min AND max
#相当于NOT (expr BETWEEN min AND max)

#COALESCE(value,...)对比操作符
#返回第一个非NULL的值,如果没有非null值,则返回NULL
mysql> SELECT COALESCE(NULL,2); #2
mysql> SELECT COALESCE(NULL,NULL,NULL); #NULL

 
#GREATEST(value1,value2,...)  
#返回其中最大的值
mysql> SELECT GREATEST(2,0);  #2
mysql> SELECT GREATEST(34.0,3.0,5.0,767.0); #767.0
mysql> SELECT GREATEST(‘B‘,‘A‘,‘C‘); #‘C‘



#expr IN (value,...)对比操作符
#当expr值能在values中找到,则返回1,否则返回0
mysql> SELECT 2 IN (0,3,5,7);  #0
mysql> SELECT ‘wefwf‘ IN (‘wee‘,‘wefwf‘,‘weg‘); #1
mysql> SELECT (3,4) IN ((1,2), (3,4));  #1
mysql> SELECT (3,4) IN ((1,2), (3,5));  #0

#expr NOT IN (value,...)对比操作符


#Isnull(expr)操作符
#如果expr是null,则返回1,否则返回0
mysql> SELECT ISNULL(1 1);  #0
mysql> SELECT ISNULL(1/0);  #1

#LEAST(value1,value2,...)
#返回最小值,如果其中有值为null,则返回null
mysql> SELECT LEAST(2,0); #0
mysql> SELECT LEAST(34.0,3.0,5.0,767.0); #3.0
mysql> SELECT LEAST(‘B‘,‘A‘,‘C‘);  #‘A‘

三、逻辑操作符

逻辑操作符返回1 (TRUE), 0 (FALSE), 或者NULL

MySQL-常用函数

#NOT, !逻辑操作符代表非操作
mysql> SELECT NOT 10; #0
mysql> SELECT NOT 0;  #1
mysql> SELECT NOT NULL; #NULL
mysql> SELECT ! (1 1); #0
mysql> SELECT ! 1 1; #1

#And,&&逻辑操作符
mysql> SELECT 1 AND 1; #1
mysql> SELECT 1 AND 0; #0
mysql> SELECT 1 AND NULL; #NULL
mysql> SELECT 0 AND NULL; #0
mysql> SELECT NULL AND 0; #0

#Or, ||逻辑操作符
mysql> SELECT 1 OR 1; #1
mysql> SELECT 1 OR 0; #1
mysql> SELECT 0 OR 0; #0
mysql> SELECT 0 OR NULL; #NULL
mysql> SELECT 1 OR NULL; #1

#Xor逻辑操作符
mysql> SELECT 1 XOR 1; #0
mysql> SELECT 1 XOR 0;  #1
mysql> SELECT 1 XOR NULL; #NULL
mysql> SELECT 1 XOR 1 XOR 1; #1

四、分配操作符

分配操作符是指赋值操作

MySQL-常用函数

mysql> SELECT @var1, @var2;  #NULL, NULL
mysql> SELECT @var1 := 1, @var2;  #1, NULL
mysql> SELECT @var1, @var2;  #1, NULL
mysql> SELECT @var1, @var2 := @var1; #1, 1
mysql> SELECT @var1, @var2; #1, 1
mysql> SELECT @var1:=COUNT(*) FROM t1; #如果是4
mysql> SELECT @var1; #4


#":="操作符也可以用在update等语句
mysql> SELECT @var1;  #4
mysql> SELECT * FROM t1;  #1, 3, 5, 7
mysql> UPDATE t1 SET c1 = 2 WHERE c1 = @var1:= 1;
mysql> SELECT @var1; #1
mysql> SELECT * FROM t1; #2, 3, 5, 7

#=操作符在两种情况下会被认为是赋值操作,而其他情况下会认为是对比操作符
#在set语句中,=操作符会被认为是赋值操作
mysql> set @a=1;
mysql> select @a; #1

#在update语句中的set子句中,=操作符会被认为是赋值操作

五、流程控制函数

流程控制函数包含以下四种函数

MySQL-常用函数

#语法格式
CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END

#当value等于compare_value时,则返回result,否则返回else里的result,如果没有else子句则返回null
mysql> SELECT CASE 1 WHEN 1 THEN ‘one‘ WHEN 2 THEN ‘two‘ ELSE ‘more‘ END;  #‘one‘

#语法格式
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END

#当第一个condition满足时,则返回result,否则返回else里的result,如果没有else子句时则返回null
mysql> SELECT CASE WHEN 1>0 THEN ‘true‘ ELSE ‘false‘ END;  #‘true‘
mysql> SELECT CASE BINARY ‘B‘ WHEN ‘a‘ THEN 1 WHEN ‘b‘ THEN 2 END;  #NULL
---------------------------------------------------------------------------------------------------------

IF(expr1,expr2,expr3)

#当expr1为1/true时,则返回expr2,否则返回expr3
mysql> SELECT IF(1>2,2,3); #3
mysql> SELECT IF(1<2,‘yes‘,‘no‘); #‘yes‘
mysql> SELECT IF(STRCMP(‘test‘,‘test1‘),‘no‘,‘yes‘);  #select STRCMP(‘test‘,‘test1‘);==>-1 #‘no‘
---------------------------------------------------------------------------------------------------------

IFNULL(expr1,expr2)

#当expr1为非null时,则返回expr1,否则返回expr2
mysql> SELECT IFNULL(1,0);  #1
mysql> SELECT IFNULL(NULL,10);  #10
mysql> SELECT IFNULL(1/0,10);  #10
mysql> SELECT IFNULL(1/0,‘yes‘); #‘yes‘
---------------------------------------------------------------------------------------------------------

NULLIF(expr1,expr2)

#当expr1等于expr2时,则返回null,否则返回expr1
mysql> SELECT NULLIF(1,1); #NULL
mysql> SELECT NULLIF(1,2); #1

六、字符串函数

6.1、ASCII(str)

返回str字符串中最左边字符的ascii码值,如果是空串则返回0,如果str是null则返回null

mysql> SELECT ASCII(‘2‘); #50
mysql> SELECT ASCII(2); #50
mysql> SELECT ASCII(‘dx‘); #100
mysql> SELECT ASCII(‘d‘);  #100

6.2、CHAR(N,... [USING charset_name])

将括号中的N转化成ascii码对应的字符,返回这些字符组成的字符串,其中的null会被忽略

mysql> SELECT CHAR(77,121,83,81,‘76‘);	#‘MySQL‘
 -> ‘MySQL‘
mysql> SELECT CHAR(77,77.3,‘77.3‘);  #‘MMM‘
 -> ‘MMM‘
mysql> SELECT CHARSET(CHAR(X‘65‘)), CHARSET(CHAR(X‘65‘ USING utf8));
 ---------------------- --------------------------------- 
| CHARSET(CHAR(X‘65‘)) | CHARSET(CHAR(X‘65‘ USING utf8)) |
 ---------------------- --------------------------------- 
| binary               | utf8                            |
 ---------------------- --------------------------------- 

6.3、CHAR_LENGTH(str)

返回字符串的字符长度

mysql> select char_length(‘mysql‘);
 ---------------------- 
| char_length(‘mysql‘) |
 ---------------------- 
|                    5 |
 ---------------------- 
1 row in set (0.00 sec)

6.4、CONCAT(str1,str2,...)

返回括号里所有参数字符串连接在一起,当其中有参数为NULL时则返回NULL

mysql> SELECT CONCAT(‘My‘, ‘S‘, ‘QL‘); #‘MySQL‘
mysql> SELECT CONCAT(‘My‘, NULL, ‘QL‘); #NULL
mysql> SELECT CONCAT(14.3); #‘14.3‘

6.5、CONCAT_WS(separator,str1,str2,...)

返回以第一个参数为分隔符的连接后的一个字符串,当有参数为NULL时则null被忽略

mysql> SELECT CONCAT_WS(‘,‘,‘First name‘,‘Second name‘,‘Last Name‘);  #‘First name,Second name,Last Name‘
mysql> SELECT CONCAT_WS(‘,‘,‘First name‘,NULL,‘Last Name‘);  #‘First name,Last Name‘

6.6、INSERT(str,pos,len,newstr)

将str中从pos位置开始后的len个字符替换成newstr字符串

mysql> SELECT INSERT(‘Quadratic‘, 3, 4, ‘What‘);  #‘QuWhattic‘
mysql> SELECT INSERT(‘Quadratic‘, -1, 4, ‘What‘);  #‘Quadratic‘
mysql> SELECT INSERT(‘Quadratic‘, 3, 100, ‘What‘);  #‘QuWhat‘

6.7、INSTR(str,substr)

返回str字符串中第一个出现substr字符串的位置

mysql> SELECT INSTR(‘foobarbar‘, ‘bar‘); #4
mysql> SELECT INSTR(‘xbar‘, ‘foobar‘); #0

6.8、LEFT(str,len)

返回str字符串中从左边开始的len个长度的字符

mysql> SELECT LEFT(‘foobarbar‘, 5);  #‘fooba‘

6.9、LENGTH(str)

返回str字符串的byte字节长度

mysql> SELECT LENGTH(‘text‘); #4