大小寫控制函數(shù)
- LOWER(str) 轉(zhuǎn)換大小寫混合的字符串為小寫字符串
- UPPER(str) 轉(zhuǎn)換大小寫混合的字符串為大寫字符串。
字符處理函數(shù)
- CONCAT(str1,str2,...) 將 str1、str2 等字符串連接起來
- SUBSTR(str,pos,len) 從 str 的第 pos 位(范圍:1~str.length)開始,截取長(zhǎng)度為len的字符串
- LENGTH(str) 獲取 str 的長(zhǎng)度
- INSTR(str,substr) 獲取 substr 在 str 中的位置
- LPAD(str,len,padstr)/RPAD(str,len,padstr) 在str的左/右邊插入字符串灵迫,插入長(zhǎng)度為len,如果str的長(zhǎng)度大于len的數(shù)量,則顯示從左側(cè)自動(dòng)截取len的長(zhǎng)度
- TRIM(str) 從 str 中刪除開頭和結(jié)尾的空格(不會(huì)處理字符串中間含有的空格)
- LTRIM(str) 從 str 中刪除左側(cè)開頭的空格
- RTRIM(str) 從 str 中刪除右側(cè)結(jié)尾的空格
- REPLACE(str,from_str,to_str) 將 str 中的 from_str 替換為 to_str(會(huì)替換掉所有符合from_str 的字符串)
數(shù)字函數(shù)
- ROUND(arg1,arg2):四舍五入指定小數(shù)的值。 arg1:小數(shù)值 arg2:保留小數(shù)的個(gè)數(shù)
- ROUND(arg1):四舍五入保留整數(shù)香伴。 arg1:小數(shù)值
- TRUNC(arg1,arg2):截?cái)嘀付ㄐ?shù)的值,不做四舍五入處理具则。arg1:小數(shù)值 arg2:保留小數(shù)的個(gè)數(shù)
- MOD(arg1,arg2):取余即纲。arg1:小數(shù)值 arg2:保留余數(shù)的個(gè)數(shù)
日期函數(shù)
- SYSDATE() 或者 NOW() 返回當(dāng)前系統(tǒng)時(shí)間,格式為 YYYY-MM-DD hh-mm-ss
- CURDATE() 返回系統(tǒng)當(dāng)前日期博肋,不返回時(shí)間
- CURTIME() 返回當(dāng)前系統(tǒng)中的時(shí)間低斋,不返回日期
- DAYOFMONTH(date) 計(jì)算日期 d 是本月的第幾天
- DAYOFWEEK(date) 日期 d 今天是星期幾,1 星期日匪凡,2 星期一膊畴,以此類推
- DAYOFYEAR(date) 返回指定年份的天數(shù)
- DAYNAME(date) 返回 date日期是星期幾
- LAST_DAY(date) 返回 date日期當(dāng)月的最后一天
轉(zhuǎn)換函數(shù)
- DATE_FORMAT(date,format) 將日期轉(zhuǎn)換成字符串(類似 oracle 中的 to_char())
- STR_TO_DATE(str,format) 將字符串轉(zhuǎn)換成日期(類似 oracle中的 to_date())
-
select DATE_FORMAT(NOW(),'%Y%m%d')
-
select STR_TO_DATE('2021年08月05日','%Y年%m月%d日') 此處'%Y年%m月%d日的年月日必須帶上
格式 描述
%a 縮寫星期名
%b 縮寫月名
%c 月,數(shù)值
%D 帶有英文前綴的月中的天
%d 月的天病游,數(shù)值(00-31)
%e 月的天唇跨,數(shù)值(0-31)
%f 微秒
%H 小時(shí) (00-23)
%h 小時(shí) (01-12)
%I 小時(shí) (01-12)
%i 分鐘,數(shù)值(00-59)
%j 年的天 (001-366)
%k 小時(shí) (0-23)
%l 小時(shí) (1-12)
%M 月名
%m 月衬衬,數(shù)值(00-12)
%p AM 或 PM
%r 時(shí)間买猖,12-小時(shí)(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 時(shí)間, 24-小時(shí) (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,與 %X 使用
%v 周 (01-53) 星期一是一周的第一天佣耐,與 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年政勃,其中的星期日是周的第一天,4 位兼砖,與 %V 使用
%x 年奸远,其中的星期一是周的第一天既棺,4 位,與 %v 使用
%Y 年懒叛,4 位
%y 年丸冕,2 位
通用函數(shù)
- IFNULL(expr1,expr2) 判斷 expr1 是否為 null,如果為 null薛窥,則用 expr2 來代替 null(類似 oracle 的 NVL()函數(shù))
- NULLIF(expr1,expr2) 判斷 expr1 和 expr2 是否相等胖烛,如果相等則返回 null,如果不相等則返回 expr1
- IF(expr1,expr2,expr3) 判斷 expr1 是否為真 (是否不為 null) 诅迷, 如果為真佩番, 則使用 expr2替代 expr1;如果為假罢杉,則使用 expr3 替代 expr1(類似 oracle的 NVL2()函數(shù))
- COALESCE(value,...) 判斷 value 的值是否為 null趟畏,如果不為 null,則返回 value滩租;如果為 null赋秀, 則判斷下一個(gè) value 是否為 null……直至出現(xiàn)不為 null 的value 并返回或者返回最后一個(gè)為 null 的 value
- CASE WHEN THEN ELSE END 條件函數(shù)
CASE WHEN THEN ELSE END 條件函數(shù)的使用
第一種寫法
SELECT
s.s_id,
s.s_name,
s.s_sex,
CASE
WHEN s.s_sex = '1' THEN '男'
WHEN s.s_sex = '2' THEN '女'
ELSE '其他'
END as sex,
s.s_age,
s.class_id
FROM
t_b_student s
WHERE
1 = 1
第二種寫法
SELECT
s.s_id,
s.s_name,
s.s_sex,
CASE s.s_sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他'
END as sex,
s.s_age,
s.class_id
FROM
t_b_student s
WHERE
1 = 1
兩個(gè)運(yùn)行結(jié)果一樣:
有一個(gè)需要注意的問題,Case函數(shù)只返回第一個(gè)符合條件的值律想,剩下的Case部分將會(huì)被自動(dòng)忽略
分組
表數(shù)據(jù):
t_b_population
sql語(yǔ)句:
SELECT country,
SUM(CASE WHEN p.sex = '1' THEN p.population ELSE 0 END) AS '男',
SUM(CASE WHEN p.sex = '2' THEN p.population ELSE 0 END) AS '女'
FROM
t_b_population p
GROUP BY country;
運(yùn)行結(jié)果:
表數(shù)據(jù):
t_b_country
sql語(yǔ)句:
SELECT
SUM(c.population) AS '人口',
CASE c.country
WHEN '中國(guó)' THEN '亞洲'
WHEN '印度' THEN '亞洲'
WHEN '日本' THEN '亞洲'
WHEN '美國(guó)' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END AS '洲'
FROM
t_b_country c
GROUP BY CASE c.country
WHEN '中國(guó)' THEN '亞洲'
WHEN '印度' THEN '亞洲'
WHEN '日本' THEN '亞洲'
WHEN '美國(guó)' THEN '北美洲'
WHEN '加拿大' THEN '北美洲'
WHEN '墨西哥' THEN '北美洲'
ELSE '其他' END;
IF(expr1,expr2,expr3) 函數(shù)的使用
SELECT
IF(1>0, '真', '假')
FROM
Table
JPA @query中使用
@query(nativeQuery = true,value = " select * from xxx where if(?1 != '',x1 = ?1,1=1) and if(?2 != '',x2= ?2,1=1) and if(?3 != '',x3 = ?3,1=1) ")
List<xxx> find(String x1,String x2,String x3)
IF…ELSE…做為流程控制語(yǔ)句使用猎莲,語(yǔ)法格式如下:
IF search_condition THEN
RETURN()
ELSEIF search_condition THEN
RETURN()
ELSE
RETURN()
END IF2
例如第N高薪水的完善
CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT
BEGIN
if N<0 then
RETURN (select min(Salary) from Employee);
else
SET N = N-1;
RETURN (
select ifnull((select distinct Salary from Employee order by Salary desc limit N,1),null) as NthHighestSalay );
end if;
END