MySQL常見函式
MySQL常見函式
函式: 將某些功能封裝到一起,對外提供到一個介面(函式名),通過函式呼叫的方式可以重複的執行函式裡的功能程式碼從而提高我們的程式碼的複用性
MySql裡自帶了很多已經封裝好了的函式,可以幫我們實現很多功能,
MySql裡呼叫函式使用函式名(),完整的寫法:
select 函式名(實參) from 表名;
一、字元函式:
1、length(str):獲取引數的位元組數
select length('abcd'); // 返回值:4
select length('資料庫abc'); // 返回值:與字元編碼型別有關
show variables like '%char%'; //檢視資料可客服端字符集編碼
GBK:一個漢字佔兩個位元組;UTF-8:一個漢字是佔三個位元組.
2、concat(str1,str2,...):連線字串
也可以這樣寫:concat(str1,concat(str2,str3)):
3、upper(str):小寫字母變大寫;
4、lower(str):大寫字母變小寫;
5、substr 和 substring
案例:擷取字串,從第4個字元(包含)開始到最後
select substr('目標字串',4) ; //注意:Mysql中索引值是從1開始的,java索引是從0開始的.
案例:擷取字串,從第二個開始接到第三個
select substr('目標字串',2,1); //注意:第一個數字是開始擷取的索引值,第二個數數擷取的長度
6、.instr('源字串','子字串'):作用返回子字串子源字串裡的起始索引.
select instr('目標字串','字串'); //返回結果3, 如果找不到返回0
7、trim(' 有空格的字串 '):作用是去掉字串前後的空格,中間空格去不掉
擴充套件用法:去掉前後兩端的其他字元:select trim('a' from 'aaaaa字元aaaaa去掉aaaaa');
8、replace('目標字串','被替換子串','用於替換的新串')替換
select replace('目標字串','字元','zifu');
二、數學函式:
1、round() : 四捨五入
select round(1.45);//不管正負數,先將絕對值round,然後加正負號
select round(1.567,2); //表示小數點保留2位
2、ceil(): 向上取整
select ceil(-1.3);
3、floor(): 向下取整
4、truncate(): 截斷
select truncate(1.65,1); // 結果保留小數1位:1.6
三、日期函式:
1、now() :返回當前日期時間
select now();
2、curdate() :返回當前系統日期,沒有時間部分
3、curtime() :返回當前系統時間,沒有日期部分
4、可以單獨獲取年/月/日
select year(now()); 取得年
select month(now()); 取得月,從從一開始
select day(now()); 取得幾號
select hour(now()); 取得小時
select minute(now());取得分鐘
select second(now());取得秒數
select monthname(now());取得月名,day hour minute second一樣
5、STR_TO_DATE(str,format) :將日期格式的字元轉換為制定格式的日期
格式字串可以包含以字母開頭的文字字元和格式說明符%。文字字元 format必須符合字面意思 str。
格式說明符 format必須與日期或時間部分匹配str。有關可以使用format的DATE_FORMAT()說明符
str_to_date('2018-1-12','%y-%m-%d');
6、DATE_FORMAT(date,format) :格式化日期,將日期轉換成字串
date根據format字串 格式化值。
format字串中 可以使用以下說明 符。%格式說明符字元前需要該字元
date_format(now(),'%y-%m-%d');
符 | 描述 |
---|---|
%a |
縮寫的工作日名稱(Sun .. Sat ) |
%b |
縮寫的月份名稱(Jan .. Dec ) |
%c |
月,數字(0 .. 12 ) |
%D |
這個月的一天,英語字尾(0th , 1st ,2nd , 3rd ,...) |
%d |
每月的某天,數字(00 .. 31 ) |
%e |
每月的某天,數字(0 .. 31 ) |
%f |
微秒(000000 ... 999999 ) |
%H |
小時(00 .. 23 ) |
%h |
小時(01 .. 12 ) |
%I |
小時(01 .. 12 ) |
%i |
分鐘,數字(00 .. 59 ) |
%j |
一年中的某一天(001 .. 366 ) |
%k |
小時(0 .. 23 ) |
%l |
小時(1 .. 12 ) |
%M |
月份名稱(January .. December ) |
%m |
月,數字(00 .. 12 ) |
%p |
AM 要麼 PM |
%r |
時間,12小時(hh:mm:ss 其次是 AM 或PM ) |
%S |
秒(00 ... 59 ) |
%s |
秒(00 ... 59 ) |
%T |
時間,24小時(hh:mm:ss ) |
%U |
周(00 .. 53 ),週日是一週的第一天; WEEK() 模式0 |
%u |
周(00 .. 53 ),週一是一週的第一天; WEEK() 模式1 |
%V |
周(01 .. 53 ),週日是一週的第一天; WEEK() 模式2; 用於 %X |
%v |
周(01 .. 53 ),週一是一週的第一天; WEEK() 模式3; 用於 %x |
%W |
平日名稱(Sunday .. Saturday ) |
%w |
星期幾(0 =星期日.. 6 =星期六) |
%X |
星期日是星期的第一天的星期,數字,四位數; 用於%V |
%x |
一週的年份,星期一是一週的第一天,數字,四位數; 用於%v |
%Y |
年份,數字,四位數 |
%y |
年份,數字(兩位數) |
%% |
文字% 字元 |
% |
x ,對於上面未列出的任何 “ x ” |
四、流程控制函式
1、if函式
select if('10>1','大','小');
2、case函式
語法:
case 要判斷的子段或表示式
when case的結果是常量1 then 要顯示的值1(或語句1;)
when case的結果是常量2 then 要顯示的值2(或語句2;)
......
else case的結果都不前面的時候顯示;
end
案例:員工表中, 部門號是30,顯示的工資是1.1倍; 部門號是40,顯示的工資是1.2倍; 其他顯示原工資
SELECT
salary AS 原工資,
department_id,
CASE department_id
WHEN 30 THEN salary*1.1
WHEN 50 THEN salary*1.2
ELSE salary
END AS 新工資
FROM employees;
3、多重if
語法:
case
when 條件1 then 要顯示的值1(或語句1;)
when 條件2 then 要顯示的值2(或語句2;)
......
else 前面的條件都不符合時候顯示;
end
案例:
SELECT
salary,
CASE
WHEN salary>20000 THEN 'A級工資'
WHEN salary>10000 THEN 'B級工資'
ELSE 'C級工資'
END AS 工資等級
FROM employees;
五、IFNULL()函式用法
語法: IFNULL(expr1,expr2) :返回一個數字或字串值
如果expr1不為NULL,返回expr1的值,否則它返回expr2的值。
這裡簡單整理常用的函式,官方手冊包含詳細的函式及其他知識點: