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;


 

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