一、DATE_FORMAT
用于以不同的格式顯示日期/時(shí)間數(shù)據(jù)。
語法
DATE_FORMAT(date,format)
date為查詢的時(shí)間,format 為要獲得的時(shí)間格式
其中format可為:
%a :返回縮寫星期名
%b :返回縮寫月份名
%c :返回月份的數(shù)值
%D:返回帶有英文前綴的月中的天
%d :返回月份的天(00-31)
%e :返回月份的天(0-31)
%f :返回微秒
%H:返回小時(shí)(00-23)
二、FIND_IN_SET函數(shù)
FIND_IN_SET('name','張三,李四,james')
通過內(nèi)部函數(shù)的轉(zhuǎn)換可以裝轉(zhuǎn)為類似于 name in('張三','李四','james')語句
不過在數(shù)據(jù)較多的查詢中使用FIND_IN_SET函數(shù)效率沒有使用in效率高
三、GROUP_CONCAT()函數(shù)
select id,group_concat(name) from aa group by id;//默認(rèn)將以,號(hào)分割
或者:select id,group_concat(name separator ',') from aa group by id;//指定分隔符
這個(gè)函數(shù)可以將查詢結(jié)果進(jìn)行拼裝,
對時(shí)間進(jìn)行處理得到想要的年份等類型數(shù)據(jù)
四、時(shí)間函數(shù)
NOW():查取現(xiàn)在時(shí)間:2020-09-10 17:47:04
CURDATE():2020-09-10
CURTIME():17:47:04
五、字符串轉(zhuǎn)換為數(shù)字
1、使用conert()進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換
SELECT
dfp.device_id,
dfp.device_name,
dfp.device_type,
dfp.project_id,
ibp.`project_name `
FROM
device_config dfp
LEFT JOIN project ibp ON CONVERT(dfp.project_id , SIGNED) = ibp.id
2、cast進(jìn)行轉(zhuǎn)換
SELECT
dfp.device_id,
dfp.device_name,
dfp.device_type,
dfp.project_id,
ibp.`project_name`
FROM
device_config dfp
LEFT JOIN project ibp ON CAST(dfp.project_id AS SIGNED INTEGER) = ibp.id
六、any_value()函數(shù)
MySQL5.7之后,sql_mode中ONLY_FULL_GROUP_BY模式默認(rèn)設(shè)置為打開狀態(tài)。
在此模式下,target list中的值要么是來自于聚合函數(shù)(sum、avg、max等)的結(jié)果,要么是來自于group by list中的表達(dá)式的值。
使用any_value()函數(shù)來抑制ONLY_FULL_GROUP_BY值被拒絕
SELECT any_value(id),any_value(price),brand FROM goods GROUP BY brand;
注意點(diǎn):當(dāng)有多個(gè)字段查詢且分組時(shí)可能造成獲取結(jié)果錯(cuò)誤
七、按照漢語拼音排序
mysql使用的默認(rèn)utf8編碼時(shí),如果直接order by 中文字段排序,排序結(jié)果會(huì)不正確,將字段先轉(zhuǎn)換成gbk編碼再排序
CONVERT(fname USING gbk) DESC
八、強(qiáng)制索引
當(dāng)發(fā)現(xiàn)優(yōu)化查詢器使用的索引不是最優(yōu)索引時(shí)可使用此函數(shù)強(qiáng)制指定使用什么索引
SELECT
customer,
count( 1 ) c
FROM
upv_ ** FORCE INDEX ( idx_created )
WHERE
created BETWEEN "2015-07-06"
AND "2015-07-07"
GROUP BY
customer
HAVING
c > 15
ORDER BY
c DESC