# MySQL常用函數
[TOC]
## 數學函數
示例:
~~~
SELECT CEIL() 進一取整;
SELECT FLOOR() 舍一取整
SELECT ROUND() 四舍五入
SELECT TRUNCATE(3.456123987,3) 取小數點后三位,直接截斷;
SELECT MOD(5,2) 5對2取余
SELECT ABS() 求絕對值
SELECT POWER(2,3) 2的3次方
SELECT PI() 得到圓周率
SELECT RAND() 產生隨機數
SELECT SIGN() 如果括號中是整數,返回1,如果是負數返回-1,如果是0返回0
SELECT EXP(2) e的2次方
~~~
## 字符串函數
~~~
字符串函數:CHAR_LENGTH(s);得到字符串的字符數
得到字符串的長度:LENGTH(s);
合并字符串:CONCAT(s1,s2,...)將字符串合并成一個字符串,如果字符串中包含NULL返回的拼接結果就是NULL;
以指定的分隔符拼接字符串:CONCAT_WS(x,s1,s2,s3);x為拼接符,x為null則結果為null
將字符串轉換為大寫:UPPER(s)|UCASE(s)
將字符串轉換為小寫:LOWER(s)|LCASE(s)
反轉字符串:REVERSE(abc) 結果cba(將順序反轉)
返回字符串的前幾個或后幾個字符:LEFT(字符,前字符數),RIGHT(字符,后字符數)
用字符串填充到指定長度:LPAD(s(原字符串),n(長度),s1(用來填充的字符串))(左端填充)RPAD(s,n,s1)(右端填充)
去掉字符串的空格:兩端TRIM(s)|左端LTRIM(s)|右端RTRIM(s)
重復指定的次數:REPEAT(s(字符串),n(重復次數))
字符串替換:REPLACE(s(原字符串),s1(要被替換的字符串),s2(用來替換的字符串))
截取字符串:SUBSTRING(s(原字符串),n1(起始點從1開始),n2(截取幾位))
比較字符串:STRCMP(s1,s2)如果第一個字符串大于第二個字符串返回1,小于返回-1,等于返回0
~~~
## 日期函數
~~~
curdate()顯示當前日期
current_date()顯示當前日期
curtime()顯示當前時間
current_time()顯示當前時間
now()顯示當前日期時間
current_timestamp()顯示當前日期時間
sysdate()顯示當前日期時間
month(‘2017-02-19’);顯示當前月份2
各個函數可以嵌套 select month(curdate()),monthName(curdate());
curdate()//
dayname(now());//返回星期幾
dayofweek(now());//返回一周內的第幾天,星期天是1星期一是2
week(now())//返回一年中的第多少個星期
year(now())返回年份
day(now())返回日
hour(now())返回小時
minute()返回分鐘
second()返回秒
select datediff('2017-01-05','2019-01-05');計算兩個日期相差的天數
~~~
## 其他常用函數
~~~
SELECT VERSION()得到當前版本
SELECT CONNECTION_ID()得到當前連接數
SELECT DATABASE()或者SCHEMA();得到當前打開的數據庫
SELECT USER(),CURRENT_USER(),SYSTEM_USER(),SESSION_USER()得到當前用戶
SELECT LAST_INSERT_ID()得到上一步插入操作產生的AUTO_INCREMENT的值 --重要
SELECT MD5('king') MD5加密函數
PASSWORD('root') 密碼加密算法,添加用戶和系統用戶使用的加密算法是PASSWORD,也只能使用PASSWORD而不能使用MD5來添加用戶的密碼。
~~~
## 條件函數
MySQL中存在條件函數(case when),有些類似于Java中的if-else語句。
**等值轉換**
~~~
select
name as '名字',
(case sex when 0 then '女' else '男' end) as '性別'
from test.student;
~~~
**行列轉換**
~~~
select name as '姓名'
,(case course when '語文' then score else 0 end) as '語文'
,(case course when '數學' then score else 0 end) as '數學'
,(case course when '英語' then score else 0 end) as '英語'
from test.course_score
~~~