mysql 运算符,常用函数

mysql常用函数介绍
参考:http://c.biancheng.net/mysql/function/

目录

MySQL 运算符

数值型函数 

mysql字符串函数

myslq日期和时间函数 

mysql聚合函数mysql流程控制函数


MySQL 运算符
 

算术运算符

+                       加法
-                        减法
*                        乘法
/ 或 DIV             除法
% 或 MOD        取余

在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL

 

比较运算符

SELECT 语句中的条件语句经常要使用比较运算符。通过这些比较运算符,可以判断表中的哪些记录是符合条件的。比较结果为真,则返回 1,为假则返回 0,比较结果不确定则返回 NULL
=                       等于    
<>, !=                不等于    
>                       大于    
<                      小于    
<=                    小于等于    
>=                    大于等于    
BETWEEN                     在两值之间    >=min&&<=max
NOT BETWEEN            不在两值之间    
IN                                   在集合中    
NOT IN                          不在集合中    
<=>                    严格比较两个NULL值是否相等    两个操作码均为NULL时,其所得值为1;而当一个操作码为NULL时,其所得值为0
LIKE                                模糊匹配    
REGEXP 或 RLIKE         正则式匹配    
IS NULL                          为空    
IS NOT NULL                 不为空    

 

逻辑运算符

逻辑运算符用来判断表达式的真假。如果表达式是真,结果返回 1。如果表达式是假,结果返回 0
NOT 或 !    逻辑非
AND            逻辑与
OR            逻辑或
XOR            逻辑异或

位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,进行位运算。然后再将计算结果从二进制数变回十进制数
&        按位与
|        按位或
^        按位异或
!        取反
<<        左移
>>        右移


数值型函数 
 

abs()--hive ok
绝对值函数 ABS(x) 返回 x 的绝对值。正数的绝对值是其本身,负数的绝对值为其相反数,0 的绝对值是 0
mysql> select abs(3), abs(-3), abs(0);
+--------+---------+--------+
| abs(3) | abs(-3) | abs(0) |
+--------+---------+--------+
|      3 |       3 |      0 |
+--------+---------+--------+


sqrt(x) --hive 在这里返回的都是是浮点数
平方根函数 SQRT(x) 返回非负数 x 的二次方根。负数没有平方根,返回结果为 NULL
mysql> select sqrt(25), sqrt(-25), sqrt(0), sqrt(33), sqrt(33.5);
+----------+-----------+---------+-------------------+-------------------+
| sqrt(25) | sqrt(-25) | sqrt(0) | sqrt(33)          | sqrt(33.5)        |
+----------+-----------+---------+-------------------+-------------------+
|        5 |      NULL |       0 | 5.744562646538029 | 5.787918451395113 |
+----------+-----------+---------+-------------------+-------------------+


mod(x, y) -- hive 中是pmod(x, y)
求余函数 MOD(x,y) 返回 x 被 y 除后的余数,MOD() 对于带有小数部分的数值也起作用,它返回除法运算后的余数
mysql> select mod(3, 2), mod(1.1, 2);
+-----------+-------------+
| mod(3, 2) | mod(1.1, 2) |
+-----------+-------------+
|         1 |         1.1 |
+-----------+-------------+


ceil(x), ceiling(x) -- hive ok
取整函数 CEIL(x) 和 CEILING(x) 的意义相同,返回不小于 x 的最小整数值,返回值转化为一个 BIGINT
mysql> select ceil(3.2), ceiling(3.2);
+-----------+--------------+
| ceil(3.2) | ceiling(3.2) |
+-----------+--------------+
|         4 |            4 |
+-----------+--------------+


floor(x) -- hive ok
FLOOR(x) 向下取整函数返回小于 x 的最大整数值
mysql> select floor(3.2);
+------------+
| floor(3.2) |
+------------+
|          3 |
+------------+


rand() -- hive ok
RAND() 函数被调用时,可以产生一个在 0 和 1 之间的随机数
mysql> select rand(), rand();
+---------------------+--------------------+
| rand()              | rand()             |
+---------------------+--------------------+
| 0.37282911257150503 | 0.4535757354028297 |
+---------------------+--------------------+

rand(x) -- hive ok
当使用整数作为参数调用时,RAND() 使用该值作为随机数的种子发生器。每次种子使用给定值生成,RAND() 将产生一个可重复的系列数字

mysql> select rand(2), rand(2);
+--------------------+--------------------+
| rand(2)            | rand(2)            |
+--------------------+--------------------+
| 0.6555866465490187 | 0.6555866465490187 |
+--------------------+--------------------+


ROUND(x) --hive 返回都是浮点数
函数返回最接近于参数 x 的整数;ROUND(x,y) 函数对参数x进行四舍五入的操作,返回值保留小数点后面指定的y位
mysql> select round(-6.6), round(-8.44), round(3.44), round(-6.66, 1), round(3.33, 3), round(88.66, -1), round(88.46, -2);
+-------------+--------------+-------------+-----------------+----------------+------------------+------------------+
| round(-6.6) | round(-8.44) | round(3.44) | round(-6.66, 1) | round(3.33, 3) | round(88.66, -1) | round(88.46, -2) |
+-------------+--------------+-------------+-----------------+----------------+------------------+------------------+
|          -7 |           -8 |           3 |            -6.7 |          3.330 |               90 |              100 |
+-------------+--------------+-------------+-----------------+----------------+------------------+------------------+
ROUND(x)函数将值x四舍五入之后保留了整数部分
从执行结果可以看出,根据参数y值,将参数x四舍五入后得到保留小数点后y位的值,x值的小数位不够y位的补零;
如果y为负值,则保留小数点左边y位,先进行四舍五入操作,再将相应的位数值取零


sign(x) -- hive 返回的都是浮点数
符号函数 SIGN(x) 返回参数的符号,x 的值为负、零和正时返回结果依次为 -1、0 和 1

mysql> select sign(3.22), sign(-1), sign(0);
+------------+----------+---------+
| sign(3.22) | sign(-1) | sign(0) |
+------------+----------+---------+
|          1 |       -1 |       0 |
+------------+----------+---------+


pow(x, y), power(x, y) -- hive返回的都是浮点数
POW(x,y) 函数和 POWER(x,y) 函数用于计算 x 的 y 次方
mysql> select pow(3, 2), power(3, 2);
+-----------+-------------+
| pow(3, 2) | power(3, 2) |
+-----------+-------------+
|         9 |           9 |
+-----------+-------------+


pi() -- hive ok
返回圆周率 
mysql> select pi();
+----------+
| pi()     |
+----------+
| 3.141593 |
+----------+


正弦函数 SIN(x) 返回 x 的正弦值,其中 x 为弧度值
mysql> select sin(1), sin(0.5*pi());
+--------------------+---------------+
| sin(1)             | sin(0.5*pi()) |
+--------------------+---------------+
| 0.8414709848078965 |             1 |
+--------------------+---------------+


反正弦函数 ASIN(x) 返回 x 的反正弦值,若 x 不在 -1 到 1 的范围之内,则返回 NULL
mysql> select asin(0), asin(0.5), asin(1);
+---------+--------------------+--------------------+
| asin(0) | asin(0.5)          | asin(1)            |
+---------+--------------------+--------------------+
|       0 | 0.5235987755982989 | 1.5707963267948966 |
+---------+--------------------+--------------------+


余弦函数 COS(x) 返回 x 的余弦值,x 为弧度值
mysql> select cos(0),cos(0.25 * pi()), cos(0.5*pi());
+--------+--------------------+-----------------------+
| cos(0) | cos(0.25 * pi())   | cos(0.5*pi())         |
+--------+--------------------+-----------------------+
|      1 | 0.7071067811865476 | 6.123233995736766e-17 |
+--------+--------------------+-----------------------+


反余弦函数 ACOS(x) 。x 值的范围必须在 -1 和 1 之间,否则返回 NULL
mysql> select acos(-1), acos(0), acos(1);
+-------------------+--------------------+---------+
| acos(-1)          | acos(0)            | acos(1) |
+-------------------+--------------------+---------+
| 3.141592653589793 | 1.5707963267948966 |       0 |
+-------------------+--------------------+---------+


正切函数 TAN(x) 返回 x 的正切值,x 为给定的弧度值
mysql> select tan(0.25 * pi()), tan(0), tan(-0.5 * pi());
+--------------------+--------+-----------------------+
| tan(0.25 * pi())   | tan(0) | tan(-0.5 * pi())      |
+--------------------+--------+-----------------------+
| 0.9999999999999999 |      0 | -1.633123935319537e16 |
+--------------------+--------+-----------------------+


反正切 ATAN(x) 返回 x 的反正切值,正切为 x 的值

余切函数 COT(x) 返回 x 的余切值,x 是给定的弧度值


mysql字符串函数


length(str) -- hive返回的是字符长度
 LENGTH(str) 函数的返回值为字符串的字节长度,使用 uft8(UNICODE 的一种变长字符编码,又称万国码)编码字符集时,一个汉字是 3 个字节,一个数字或字母是一个字节
mysql> select length('mouse'), length('我的祖国');
+-----------------+------------------------+
| length('mouse') | length('我的祖国')     |
+-----------------+------------------------+
|               5 |                     12 |
+-----------------+------------------------+


concat(s1, s2, ...) -- hive ok
CONCAT(sl,s2,...) 函数返回结果为连接参数产生的字符串,或许有一个或多个参数
若有任何一个参数为 NULL,则返回值为 NULL。若所有参数均为非二进制字符串,则结果为非二进制字符串。若自变量中含有任一二进制字符串,则结果为一个二进制字符串
mysql> select concat('mysql', '5.7'), concat('mysql', null);
+------------------------+-----------------------+
| concat('mysql', '5.7') | concat('mysql', null) |
+------------------------+-----------------------+
| mysql5.7               | NULL                  |
+------------------------+-----------------------+


insert(s1, start, len, s2) -- hive没有此函数
使用字符串s2,替换s1中从start开始,start+len 之间的字符串,然后返回一个新的字符串,包括起始位置
mysql> select insert('people', 1, 2, 'mo'), insert('people', 1, 3, 'mo');
+------------------------------+------------------------------+
| insert('people', 1, 2, 'mo') | insert('people', 1, 3, 'mo') |
+------------------------------+------------------------------+
| moople                       | mople                        |
+------------------------------+------------------------------+
注意:这里的字符串是从1开始计算位置的


replace(s, s1, s2) -- hive ok
替换函数 REPLACE(s,s1,s2) 使用字符串 s2 替换字符串 s 中所有的字符串 s1
mysql> select replace('peopeple', 'pe', 'mous');
+-----------------------------------+
| replace('peopeple', 'pe', 'mous') |
+-----------------------------------+
| mousomousple                      |
+-----------------------------------+


lower(x)/upper(x) -- hive ok
将字符串转换为小写/大写
mysql> select lower('PEOple'), upper('people');
+-----------------+-----------------+
| lower('PEOple') | upper('people') |
+-----------------+-----------------+
| people          | PEOPLE          |
+-----------------+-----------------+


left(x, n)/right(x, n)/trim(x)  --hive没有left/right函数
从左边开始截取字符串/从右边开始截取字符串/删除字符串两侧的空格
mysql> select left('people', 2), right('people', 2), trim('   people   ');
+-------------------+--------------------+----------------------+
| left('people', 2) | right('people', 2) | trim('   people   ') |
+-------------------+--------------------+----------------------+
| pe                | le                 | people               |
+-------------------+--------------------+----------------------+


substring(s, n, len) -- hive ok
获取子串函数 SUBSTRING(s,n,len) 带有 len 参数的格式,从字符串 s 返回一个长度为 len 的子字符串,从n开始
mysql> select substring('people', 2, 3), substring('people', -2, 3);
+---------------------------+----------------------------+
| substring('people', 2, 3) | substring('people', -2, 3) |
+---------------------------+----------------------------+
| eop                       | le                         |
+---------------------------+----------------------------+
字符串索引是从1开始计数的,如果开始位置是负数则是从后向前看


reverse(str) -- hive ok
符串逆序函数 REVERSE(s) 可以将字符串 s 反转,返回的字符串的顺序和 s 字符串的顺序相反
mysql> select reverse('people');
+-------------------+
| reverse('people') |
+-------------------+
| elpoep            |
+-------------------+


myslq日期和时间函数 


CURDATE() 和 CURRENT_DATE() 函数的作用相同,将当前日期按照“YYYY-MM-DD”或“YYYYMMDD”格式的值返回,具体格式根据函数用在字符串或数字语境中而定
CURTIME() 和 CURRENT_TIME() 函数的作用相同,将当前时间以“HH:MM:SS”或“HHMMSS”格式返回,具体格式根据函数用在字符串或数字语境中而定
NOW() 和 SYSDATE() 函数的作用相同,都是返回当前日期和时间值,格式为“YYYY-MM-DD HH:MM:SS”或“YYYYMMDDHHMMSS”,具体格式根据函数用在字符串或数字语境中而定
mysql> select current_date(), curdate(), current_time(), curtime(), now(), sysdate();
+----------------+------------+----------------+-----------+---------------------+---------------------+
| current_date() | curdate()  | current_time() | curtime() | now()               | sysdate()           |
+----------------+------------+----------------+-----------+---------------------+---------------------+
| 2019-10-25     | 2019-10-25 | 05:43:33       | 05:43:33  | 2019-10-25 05:43:33 | 2019-10-25 05:43:33 |
+----------------+------------+----------------+-----------+---------------------+---------------------+
-- hive 只有current_date()
            current_timestamp() hive中查询当前时间


            
UNIX_TIMESTAMP(date) 若无参数调用(默认为当前时间),返回一个无符号整数类型的 UNIX 时间戳('1970-01-01 00:00:00'GMT之后的秒数)。
如果传入参数,它会将参数值以'1970-01-01 00:00:00'GMT后的秒数的形式返回

FROM_UNIXTIME(date) 函数把 UNIX 时间戳转换为普通格式的日期时间值,与 UNIX_TIMESTAMP () 函数互为反函数
mysql> select unix_timestamp(), unix_timestamp(now() - 5), from_unixtime(unix_timestamp());
+------------------+---------------------------+---------------------------------+
| unix_timestamp() | unix_timestamp(now() - 5) | from_unixtime(unix_timestamp()) |
+------------------+---------------------------+---------------------------------+
|       1571953688 |                1571953683 | 2019-10-25 05:48:08             |
+------------------+---------------------------+---------------------------------+
-- hive 也有这两个函数,用法类似

MONTH(date)  -- hive ok
函数返回指定 date 对应的月份,范围为 1~12

MONTHNAME(date)  -- hive没有此函数
函数返回日期 date 对应月份的英文全名

DAYNAME(date)  -- hive没有此函数
函数返回 date 对应的工作日英文名称,例如 Sunday、Monday 等

DAYOFWEEK(d)  -- hive没有此函数
 函数返回 d 对应的一周中的索引(位置)。1 表示周日,2 表示周一,……,7 表示周六。这些索引值对应于ODBC标准

WEEK()   -- hive没有此函数
函数计算日期 date 是一年中的第几周。WEEK(date,mode) 函数允许指定星期是否起始于周日或周一,以及返回值的范围是否为 0~52 或 1~53

DAYOFYEAR(d) -- hive没有此函数
函数返回 d 是一年中的第几天,范围为 1~366

DAYOFMONTH(d)  -- hive ok
函数返回 d 是一个月中的第几天,范围为 1~31

YEAR(date)  -- hive ok
函数返回的年份值范围为 1000 到 9999,如果日期为零,YEAR() 函数返回 0

mysql> select month(now()), monthname(now()), dayname(now()), dayofweek(now()), week(now());
+--------------+------------------+----------------+------------------+-------------+
| month(now()) | monthname(now()) | dayname(now()) | dayofweek(now()) | week(now()) |
+--------------+------------------+----------------+------------------+-------------+
|           10 | October          | Friday         |                6 |          42 |
+--------------+------------------+----------------+------------------+-------------+


mysql> select dayofyear(now()), dayofmonth(now()), year(now());
+------------------+-------------------+-------------+
| dayofyear(now()) | dayofmonth(now()) | year(now()) |
+------------------+-------------------+-------------+
|              298 |                25 |        2019 |
+------------------+-------------------+-------------+


DATE_ADD(date,INTERVAL expr type) 和 ADDDATE(date,INTERVAL expr type) 两个函数的作用相同,都是用于执行日期的加运算
DATE_ADD() 和 ADDDATE() 函数有两个参数:
date 是 DATE 或 DATETIME 的起始值。
INTERVAL expr type是要添加到起始日期值的间隔值

DATE_SUB(date,INTERVAL expr type) 和 SUBDATE(date,INTERVAL expr type) 两个函数作用相同,都是执行日期的减法运算。
DATE_SUB() 和 SUBDATE() 函数接受两个参数:
date 是 DATE 或 DATETIME 的起始值。
expr 是一个字符串,用于确定从起始日期减去的间隔值。type 是 expr 可解析的间隔单位,例如 DAY,HOUR 等

ADDTIME(time,expr) 函数用于执行时间的加法运算。添加 expr 到 time 并返回结果。
其中:time 是一个时间或日期时间表达式,expr 是一个时间表达式

SUBTIME(time,expr) 函数用于执行时间的减法运算。
其中:函数返回 time。expr 表示的值和格式 time 相同。time 是一个时间或日期时间表达式, expr 是一个时间

DATEDIFF(date1,date2) 返回起始时间 date1 和结束时间 date2 之间的天数。date1 和 date2 为日期或 date-and-time 表达式


mysql> select date_add(now(), interval 3 day), date_sub(now(), interval 3 day), addtime(now(), '0:5:5');
+---------------------------------+---------------------------------+-------------------------+
| date_add(now(), interval 3 day) | date_sub(now(), interval 3 day) | addtime(now(), '0:5:5') |
+---------------------------------+---------------------------------+-------------------------+
| 2019-10-28 06:38:15             | 2019-10-22 06:38:15             | 2019-10-25 06:43:20     |
+---------------------------------+---------------------------------+-------------------------+

mysql> select now(),  subtime(now(), '0:10:25'), datediff(now(), date_add(now(), interval 4 day));
+---------------------+---------------------------+--------------------------------------------------+
| now()               | subtime(now(), '0:10:25') | datediff(now(), date_add(now(), interval 4 day)) |
+---------------------+---------------------------+--------------------------------------------------+
| 2019-10-25 06:41:55 | 2019-10-25 06:31:30       |                                               -4 |
+---------------------+---------------------------+--------------------------------------------------+


type取值
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH

注意:
上面的函数中hive虽然有date_add, date_sub函数,但是增减单位限定为了day,而不是可调的,而且传入的日期可以直接是字符串
hive中datediff(date1, date2)可以直接传入字符串

DATE_FORMAT(date,format) 函数是根据 format 指定的格式显示 date 值。

DATE_FORMAT() 函数接受两个参数:
date:是要格式化的有效日期值
format:是由预定义的说明符组成的格式字符串,每个说明符前面都有一个百分比字符(%)

主要的格式如下:
%H    以 2 位数表示 24 小时(00~23)
%k    以 24 小时(0~23)表示
%m    月份,数字形式(00~12)
%c    月份,数字形式(0~12)
%d    该月日期,数字形式(00~31)
%e    该月日期,数字形式((0~31)
%i    分钟,数字形式(00~59)
%Y    4 位数形式表示年份
%y    2 位数形式表示年份
%T    时间,24 小时制(小时 (hh): 分钟 (mm): 秒数 (ss))


WEEKDAY(d)  -- hive 没有此函数
返回 d 对应的工作日索引。0 表示周一,1 表示周二,……,6 表示周日

mysql> select weekday(now());
+----------------+
| weekday(now()) |
+----------------+
|              4 |
+----------------+

mysql聚合函数

mysql流程控制函数


if(expr,v1,v2)

mysql> select if(1<2, 'right', 'wrong'), if(length('mouse')>3, 'long', 'short');
+---------------------------+----------------------------------------+
| if(1<2, 'right', 'wrong') | if(length('mouse')>3, 'long', 'short') |
+---------------------------+----------------------------------------+
| right                     | long                                   |
+---------------------------+----------------------------------------+


ifnull(v1, v2)
如果 v1 不为 NULL,则 IFNULL 函数返回 v1; 否则返回 v2 的结果
mysql> select ifnull(3, 'null'), ifnull(null, 'it is null');
+-------------------+----------------------------+
| ifnull(3, 'null') | ifnull(null, 'it is null') |
+-------------------+----------------------------+
| 3                 | it is null                 |
+-------------------+----------------------------+

简单的 CASE 语句就是指使用简单 CASE 语句来检查表达式的值与一组唯一值的匹配。
简单的 CASE 语句的语法:
CASE  
   WHEN condition1 THEN <操作>
   WHEN condition2 THEN <操作>
   ...
   ELSE <操作>
END;


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章