mysql时间相减得到天数保留两位_【敲黑板!】分布式事务数据库 —-MySQL 数据库开发规范(第四节)...
今天Amy著重為大家講解一下關(guān)于函數(shù)的一些硬核知識(shí),也是本文中非常重要的一個(gè)章節(jié),記得認(rèn)真看(dianzan)哦~
第四節(jié)、函數(shù)
4.1 字符串連接函數(shù)
MySQL 數(shù)據(jù)庫(kù)中字符串連接方法,需使用 CONCAT() 或 CONCAT_ WS()函數(shù),語法如下:
CONCAT(string1,string2,…)
CONCAT_ WS(separator,string1,string2,…)
MySQL 中的 CONCAT 和 Oracle 中的 CONCAT 不同,可以接受任意多個(gè)參數(shù),可以較為簡(jiǎn)
單的替代’||'符號(hào)的作用。MySQL 也可以通過 sql_mode 配置雙管道符作為字符串連接運(yùn)算符,
但不推薦這樣做。
4.2 字符串長(zhǎng)度統(tǒng)計(jì)函數(shù)
LENGTH(string) #返回 string 字符串所占的字節(jié)數(shù)
CHAR_LENGTH(string) #返回 string 字符串中的字符個(gè)數(shù)
統(tǒng)計(jì)字符個(gè)數(shù),就不區(qū)分是漢字還是字母或數(shù)字,也跟字符集沒有關(guān)系,若統(tǒng)計(jì)的是字
節(jié)數(shù),則由字符是漢字、字母或數(shù)字類型,以及字符集共同決定。
4.2.1 特別說明
我們所有的 MySQL 數(shù)據(jù)庫(kù)都將會(huì)采用統(tǒng)一的 UTF8 編碼,所以一個(gè)漢字占 3 個(gè)字節(jié),
中文輸入法(或稱全角輸入模式)下的字母或數(shù)字占 3 個(gè)字節(jié);英文輸入法(或半角輸入法
模式)下一個(gè)字母或數(shù)字占 1 個(gè)字節(jié)。
4.3 字符串判斷函數(shù)
IF(exp1,exp2,exp3):若是 exp1 為真,返回 exp2;若是 exp1 為假,返回 exp3;
IFNULL(exp1,exp2):若是 exp1 IS NOT NULL,返回 exp1,否則返回 exp2;
NULLIF(exp1,exp2):若是 exp1=exp2,返回 NULL,否則返回 exp1;
4.4 字符串替換函數(shù)
LTRIM(exp1):去掉 exp1 中字符串開頭的空格;
RTRIM(exp1):去掉 exp1 中字符串結(jié)尾的空格;
TRIM(exp1):去掉 exp1 中的開頭和結(jié)尾的空格;
TRIM(exp2,exp1):去除掉 exp1 中存在的字符串 exp2;
4.5 字符串查找函數(shù)
SUBSTRING_INDEX(exp1,delim,count)
exp1 為 字 符 串 , delim 為 分 割 符 號(hào) , count 表 示 第 幾 個(gè) 風(fēng) 格 符 號(hào) , 例 如 :
SUBSTRING_INDEX(‘熱璞科技’,‘.’,1),返回:ali
SUBSTRING(exp1,pos,len)
exp1 為字符串,pos 為位置,len 為長(zhǎng)度,例如:SUBSTRING(‘熱璞科技’,1,5),返回:ali。
LOCAL(substr,str)
查找 substr 在 str 中的第一個(gè)位置,例如:LCOAL(熱璞科技’,‘.’),返回:6。
4.6 字母大小寫轉(zhuǎn)換函數(shù)
UPPER(exp1):把字符串 exp1 轉(zhuǎn)換成大寫;
LOWER(exp1):把字符串 exp1 轉(zhuǎn)換成小寫;
4.7 數(shù)學(xué)函數(shù)
ABS(value):返回 value 的絕對(duì)值,例:ABS(-101),返回:101
FLOOR(value):去掉 value 的小數(shù),例:FLOOR(2013.8),返回:2013
MOD(N,M):返回 N 除以 M 的余數(shù),例:MOD(2013,10),返回:3
ROUND(value):返回 value 的四舍五入值,例:FLOOR(2013.8),返回:2014
ROUND(value,num):保留 num 位小數(shù) value 的四舍五入值,例FLOOR(2013.867,1),返回:2013.9
RAND():返回隨機(jī)數(shù)值
4.8 日期操作函數(shù)
獲取當(dāng)前時(shí)間函數(shù):NOW()、CURDATE()、CURTIME()
NOW()函數(shù)精確到秒, 格式:YYYY-MM-DD HH:MM:SS
CURDATE()函數(shù)精確到天, 格式:YYYY-MM-DD
CURTIME()函數(shù)提供小時(shí)、分鐘、秒, 格式:HH:MM:SS
4.8.1 特別說明
從主備數(shù)據(jù)異步復(fù)制的數(shù)據(jù)安全性角度出發(fā),禁止使用 SYSDATE()函數(shù)獲取當(dāng)前時(shí)間。
日期數(shù)值的加減函數(shù)
DATE_ADD(date,INTERVAL expr type)
DATE_ SUB(date,INTERVAL expr type)
常用的幾種 type 類型:YEAR、MONTH、DAY、HOUR、MINUTE,其中 expr 可以為
正數(shù)或負(fù)數(shù),我們?cè)陂_過程中,一般使用 DATE_ADD()函數(shù),若要做日期減去一個(gè)數(shù)字的
方式,就使用負(fù)數(shù)。
MySQL 中不能像 Oracle 那樣直接對(duì)時(shí)間類型進(jìn)行加減運(yùn)算,直接使用加減運(yùn)算符不會(huì)
得到符合預(yù)期的結(jié)果,需要使用函數(shù)進(jìn)行運(yùn)算。
DATEDIFF(expr1,expr2),是返回 開始日期 expr1 與 結(jié)束日期 expr2 之間,相差的天
數(shù) ,返回值為正數(shù)或負(fù)數(shù)。
返回日期某部分信息的函數(shù)
YEAR(expr1) 返回日期 expr1 部分的年份;
MONTH(expr1) 返回日期 expr1 部分的月份;
DAY(expr1)返回 expr1 部分的天數(shù);
WEEKDAY(expr1)返回 expr1 對(duì)應(yīng)的星期數(shù)字,0 表示星期一,1 表示星期二,其他依次類
推;
4.9 類型轉(zhuǎn)換函數(shù)
? 日期類型格式轉(zhuǎn)換
字符串轉(zhuǎn)換成日期方式,DATE_FORMAT()或 STR_TO_DATE(),兩個(gè)函數(shù)的格式如下:
DATE_FORMAT(expr1,format)
STR_TO_DATE(expr1, format)
4.9.1 特別說明
STR_TO_DATE()是為兼容 Oracle 數(shù)據(jù)庫(kù)對(duì)應(yīng)函數(shù)。
常用的日期格式 YYYY-MM-DD HH:MM:SS 對(duì)應(yīng)的 FORMAT 為:%Y-%m-%d %H:%i:%S。
通用類型轉(zhuǎn)換函數(shù)
CAST(expr AS type) 則是把 expr 數(shù)字或字符串 轉(zhuǎn)換為 type 類型;
CONVERT(expr,type) 則是把 expr 數(shù)字或字符串 轉(zhuǎn)換為 type 類型;
CONVERT(expr USING transcoding_name) 則是轉(zhuǎn)換字符串或字段的字符集編碼;
日期整型轉(zhuǎn)換函數(shù)
UNIX_TIMESTAMP(date_string) 則是將字符串格式表達(dá)的日期轉(zhuǎn)換成 INT 無符號(hào)類型的整
型數(shù)值,例如:
FROM_UNIXTIME(int_value) 則是將用整型數(shù)值表達(dá)的日期轉(zhuǎn)換成字符串格式的日期,例
如:
IP 地址轉(zhuǎn)換
可以使用 INET_ATON()、INET_NTOA()、INET6_ATON()、INET6_NTOA()實(shí)現(xiàn) IP 地址和
整型值之間的轉(zhuǎn)換。
隱式轉(zhuǎn)換
在不同類型的列之間發(fā)生比較或運(yùn)算時(shí),MySQL 遵循如下規(guī)則:
NULL 和 NULL 比較不轉(zhuǎn)換;
字符串和不同的字符串比較,則使用字符串比較;
整型和不同的整型比較,則使用整型比較;
十六進(jìn)制值和整型以外的類型比較時(shí)十六進(jìn)制值視為二進(jìn)制字符串;
時(shí)間類型和字符串常量比較時(shí),字符串轉(zhuǎn)換為時(shí)間類型進(jìn)行比較;
DECIMAL 類型的比較方式取決于另一個(gè)值的類型,如果是整型,則使用 DECIMAL 比
較;如果是浮點(diǎn)型,則使用浮點(diǎn)類型比較。其它情況,使用浮點(diǎn)比較;
4.10 特殊函數(shù)
SYSDATE()
原意為獲取調(diào)用函數(shù)時(shí)刻的時(shí)間,通常在標(biāo)準(zhǔn)化的 MySQL 配置中,會(huì)將其修改為 NOW()
的同義詞,為 SQL 語句開始執(zhí)行的時(shí)間。從而規(guī)避 SYSDATE 帶來的復(fù)制問題與
sysdate-is-now 參數(shù)帶來的行為改變導(dǎo)致的潛在的配置不一致風(fēng)險(xiǎn)兩個(gè)角度考慮,故建議禁
止使用函數(shù) SYSDATE()。
LAST_INSERT_ID()
獲取最近成功插入帶自增長(zhǎng)的表的數(shù)據(jù)行的自增長(zhǎng) ID 值,在分布式數(shù)據(jù)庫(kù)開發(fā)當(dāng)中,因可
能涉及到分布式事務(wù),以及全局自增 ID,因此,禁止使用該函數(shù)。
SLEEP()、BENCHMARK()
應(yīng)用程序中要禁止使用此類函數(shù),及防 SQL 注入方式對(duì)待。
UUID()
生產(chǎn)全局唯一 ID 的函數(shù),MySQL 使用通用的算法,算法版本為 1,該函數(shù)不能確保絕對(duì)不
發(fā)生沖突,但是沖突的概率極低。由于 UUID 分布的隨機(jī)性,非常不適合作為 InnoDB 存儲(chǔ)
引擎表的主鍵或唯一性的標(biāo)識(shí),非特殊原因或特殊場(chǎng)景不應(yīng)使用。
GET_LOCK()、RELEASE_LOCK()、IS_FREE_LOCK()、IS_USED_LOCK()
用戶鎖函數(shù),對(duì)于定時(shí)調(diào)度存儲(chǔ)過程,該系列函數(shù)可以用于確保只有一個(gè)存儲(chǔ)過程正在運(yùn)行
類型的特殊功能,或者控制應(yīng)用程序單線程運(yùn)行類型的特殊功能。我們建議不要在分布式數(shù)
據(jù)庫(kù)中使用存儲(chǔ)過程,因此,也禁止使用此類函數(shù)。
4.11 聚合函數(shù)
分布式數(shù)據(jù)庫(kù) 能夠支持聚合函數(shù)與 GROUP BY,ORDER BY,HAVING 的使用;也
可以在 JOIN 語句中使用聚合函數(shù)。如:
SELECT count(t.id) FROM t LEFT JOIN t1 on t.id=t1.id GROUP BY t.name;
4.11.1 嵌套聚合函數(shù)
禁止在分布式數(shù)據(jù)庫(kù)中使用 MAX(AVG())、COUNT(DISTINCT)這之類的嵌套聚合函數(shù)。
好了,以上就是今天的內(nèi)容,我們明天再見啦~啵唧~
總結(jié)
以上是生活随笔為你收集整理的mysql时间相减得到天数保留两位_【敲黑板!】分布式事务数据库 —-MySQL 数据库开发规范(第四节)...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用社工薪贷利率一般多少
- 下一篇: shell安装mysql5.7_一键部署