一、獲取當前日期的函數
都同樣,用法不一樣mysql
CURDATE() :用於獲取系統當前日期
CURRENT_DATE() 用於系統獲取當前日期sql
mysql> select CURDATE(),CURRENT_DATE();
二、獲取當前時間的函數數據庫
CURTIME() :用於獲取系統當前時間網絡
mysql> select CURTIME();
三、獲取當前日期和時間的函數ide
CURRENT_TIMESTAMP() :用於獲取系統當前日期和時間
LOCALTIME() :用於獲取系統當前日期和時間
NOW() :用於獲取系統當前日期和時間
SYSDATE(): 用於獲取系統當前日期和時間函數
mysql> select CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
四、獲取時間戳的函數加密
UNIX_TIMESTAMP() 用於獲取 UNIX 格式的時間戳線程
mysql> select UNIX_TIMESTAMP();
時間戳是一份可以表示一份數據在一個特定時間點已經存在的完整的可驗證的數據。
五、轉換時間戳的函數3d
FROM_UNIXTIME() 用於將 UNIX 格式的時間戳轉換爲普通格式的時 間code
mysql> select FROM_UNIXTIME(1587693176); # 添加以前查出的時間戳
六、獲取 UTC 日期的函數
UTC_DATE() :用於獲取當前 UTC (世界標準時間) 日期值
mysql> select UTC_DATE();
七、獲取 UTC 時間的函數
UTC_TIME() 用於獲取當前 UTC (世界標準時間) 時間值
mysql> select UTC_TIME();
八、獲取月份的函數
MONTH(date) :用於返回 date 對應的月份
MONTHNAME(date): 用於返回 date 對應月份的英文全名
mysql> select MONTH('2020-4-24'),MONTHNAME('2020-4-24');
九、獲取星期的函數
DAYNAME(date) :用於返回 date 對應的工做日的英文名稱
DAYOFWEEK(date) :用於返回 date 對應的一週中的索引,1 表示週日,2 表示週一,...... ,7 表示週六
WEEKDAY(date): 用於返回日期對應的工做日索引,0 表示週一,1 表示週二,...... ,6 表示週日
WEEK(date): 用於計算 date 是一年中的第幾周,一年有 53 周
WEEKOFYEAR(date) :用於計算日期 date 是一年中的第幾周,一年有 53 周
mysql> select DAYNAME('2020-4-24'),DAYOFWEEK('2020-4-24'),WEEKDAY('2020-4-24'),WEEK('2020-4-24'),WEEKOFYEAR('2020-4-24');
十、獲取天數的函數
DAYOFYEAR(date) :用於返回 date 是一年中的 第幾天,一年有 365 天
DAYOFMONTH(date): 用於計算 date 是一個月中的第幾天
mysql> select DAYOFYEAR('2020-4-24'),DAYOFMONTH('2020-4-24');
十一、獲取年份的函數
YEAR(date) :返回 date 對應的年份
mysql> select YEAR('20-04-24'),YEAR('98-04-24');
十二、獲取季度的函數
QUARTER(date) :返回 date 對應的一年中的季度值
mysql> select QUARTER('20-04-24');
1三、獲取分鐘的函數
MINUTE(time) 返回 time 對應的分鐘值
mysql> select MINUTE('20-04-24 10:18:00');
1四、獲取秒鐘的函數
SECOND(time) 返回 time 對應的秒數
mysql> select SECOND('10:18:22');
1五、獲取日期的指定值的函數
EXTRACT(type FROM date) 用於獲取指定的日期值
mysql> select EXTRACT(YEAR FROM '2020-04-24') AS col1, # 當type爲YEAR 時,只返回年值 -> EXTRACT(YEAR_MONTH FROM '2020-04-24 10:18:22') AS col2, # 當type爲 YEAR_MONTH時,返回年與月 -> EXTRACT(DAY_MINUTE FROM '2020-04-24 10:18:22') AS col3; # 當type爲 DAY_MINUTE時,返回日、小時、分鐘
1六、時間和秒鐘轉換的函數
TIME_TO_SEC(time) :用於將 time 轉換 爲秒鐘,公式爲 " 小時3600 + 分鐘60 + 秒 "
SEC_TO_TIME(time): 用於將秒值轉換爲時間格式
mysql> select TIME_TO_SEC('23:23:00'),SEC_TO_TIME('84180');
1七、計算日期和時間的函數
DATE_ADD() :用於對日期進行加運算,格式爲 DATE_ADD(date, INTERVAL expr type)
DATE_SUB(): 用於對日期進行減運算,格式爲 DATE_SUB(date, INTERVAL expr type)
SUBDATE(): 用於對日期進行減運算,格式爲 SUBDATE(date, INTERVAL expr type)
ADDTIME() :用於對日期進行加運算,格式爲 ADDTIME(date, expr)
SUBTIME() :用於對日期進行減運算,格式爲 SUBTIME(date, expr)
DATE_DIFF() :用於計算兩個日期之間的間隔天數
mysql> select DATE_ADD('2020-12-31 23:59:59', INTERVAL 1 SECOND); # 對指定的日期 增長1秒
mysql> select DATE_ADD('2020-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND); # 對指定的日期增長1分1秒
mysql> select DATE_SUB('2020-01-01', INTERVAL 31 DAY); # 給指定的日期減去31天
mysql> select SUBDATE('2020-01-01', INTERVAL 31 DAY);
mysql> select ADDTIME('2020-12-31 23:59:59', '1:1:1'); # 給指定的日期增長1時1分1 秒
mysql> select SUBTIME('2020-12-31 23:59:59', '1:1:1'); # 給指定的日期減去1時1分1 秒
mysql> select DATEDIFF('2020-06-01', '2020-04-24');
1八、將日期和時間格式化的函數
DATE_FORMAT(date, format) 用於格式化日期,即根據 format 指定的格式 顯示 date 值
TIME_FORMAT(time, format) 用於格式化時間,即根據 format 指定的格式顯示 time 值
GET_FORMAT() ,咱們指定值類型和格式化類型,而後會顯示成格式字符串
mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y');
mysql> select TIME_FORMAT('16:00:00', '%H %k %I');
mysql> select DATE_FORMAT('2000-10-05 22:23:00', GET_FORMAT(DATE,'USA'));
%d該月日期,數字形式(00..31)
%e該月日期,數字形式(0..31)
%f微秒(000000...999999)
%H以2位數表 示24小時(00..23)
%h,%I 以2位數表示12小時(01..12)
%i分鐘,數字形式(00-59)
%j一年中的天數(001366)
%k以24小時(0-23)
%l以12小時(0..12)
%M月份名稱(january..December)
%m月份數字形式 (00..12)
%p上午(AM)或下午(PM)
%r時間,12小時制(小時hh:分鐘mm:秒鐘ss後面加AM或PM)
%S,%s以2位數形式表示秒(00..59)
%T時間,24小時制(小時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同時使用
%Y4位數形式表示年份
%y2 位數形式表示年份
%% 「%」文字字符
IF() IF(expr, v1, v2) 若是表達式 expr 爲 TRUE ,則返回值爲 v1 ,不然返回 v2
mysql> select IF(1>2,2,3);
能夠看到一併不大於二因此返回v2,也就是3
IFNULL() IFNULL(v1, v2) ,若是 v1 不爲 NULL ,則返回值爲 v1 ;若是 v1 爲 NULL ,則返回值爲 v2
mysql> select IFNULL(1,2),IFNULL(NULL,10);
CASE 語法:CASE expr WHEN v1 THEN r1 [WHEN v2 THEN r2] [ELSE rn] END 含義:若是 expr 等於某個 vn ,則返回對應位置 THEN 後面的結果,若是與全部值都不相等,則返回 ELSE 後面的 rn
mysql> select CASE 2 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END;
一、獲取 MySQL 版本號的函數
VERSION() 用於獲取 MySQL 版本號
mysql> select VERSION();
二、查看當前用戶的鏈接數的ID函數
CONNECTION_ID() 用於查看當前用戶的鏈接數
mysql> select CONNECTION_ID();
mysql> show PROCESSLIST; # 查看當前用戶的鏈接信息
上圖標籤含義以下:
- Id :用戶登陸 MySQL 時,系統分配的鏈接 id
- User :當前鏈接的用戶
- Host :顯示這個語句是從哪一個 IP 的哪一個端口上發出的,能夠用來追蹤出現問題語句的用戶
- db :顯示這個進程目前鏈接的是哪一個數據庫
- Command :顯示當前鏈接執行的命令,通常取值爲休眠(Sleep)、查詢(Query)、鏈接(Connect)
- Time :顯示這個狀態持續的時間,單位是秒
- State :顯示使用當前鏈接的 SQL 語句的狀態
- Info :顯示這個 SQL 語句
三、查看當前使用的數據庫的函數
DATABASE() :用於查看當前使用的數據庫
SCHEMA(): 用於查看當前使用的數據庫
mysql> select database(),SCHEMA();
四、查看當前登陸的用戶名的函數
USER() :返回當前登陸的用戶 及主機名
CURRENT_USER(): 用於返回當前登陸的用戶及主機名
SYSTEM_USER() :用於返回當前登陸的用戶及主機名
mysql> select USER(),CURRENT_USER(),SYSTEM_USER();
五、查看指定字符串的字符集的函數
CHARSET(str) 用於查看字符串 str 的字符集
mysql> select CHARSET('abc');
六、查看指定字符串的排列方式的函數
COLLATION(str): 用於查看字符串 str 的字符排列方式
mysql> select COLLATION('abc');
七、獲取後一個自動生成的 ID 值得函數
LAST_INSERT_ID() :用於獲取後一個自動生成的 ID 值
#先建立一個表,其id字段帶有 AUTO_INCREMENT約束 mysql> create table tab1( -> id int auto_increment primary key, -> name varchar(30) -> ); mysql> insert into tab1 values (NULL,'zhangsan'); #插入一條數據,這時id沒有指定, 則自動生成,id爲1 mysql> insert into tab1 values (NULL,'lisi'); # 插入一條數據,這時id沒有指定, 則自動生成,id爲2 mysql> select * from tab1; # 查看錶的信息 +----+----------+ | id | name | +----+----------+ | 1 | zhangsan | | 2 | lisi | +----+----------+ mysql> select LAST_INSERT_ID();
mysql> insert into tab1 values (NULL,'aaa'),(NULL,'bbb'),(NULL,'ccc'); mysql> select * from tab1; # 若是咱們一次性插入多條數據,雖然 id到了5 +----+----------+ | id | name | +----+----------+ | 1 | zhangsan | | 2 | lisi | | 3 | aaa | | 4 | bbb | | 5 | ccc | +----+----------+ mysql> select LAST_INSERT_ID(); # 但咱們用LAST_INSERT_ID()查看時 卻爲3 ,這是由於LAST_INSERT_ID()只返回插入的 第一行數據時產生值 +------------------+ | LAST_INSERT_ID() | +------------------+ | 3 | +------------------+
4、加/解密函數
一、加密函數
PASSWORD(str) :從明文密碼 str 計算並返 回加密後的密碼字符串,當參數爲 NULL 時,返回 NULL
MD5(str) 爲字符串 str 算出一個 MD5 128 比特校驗和
ENCODE(str, pswd_str) 使用 pswd_str 做爲密碼,加密 str
mysql> select PASSWORD('newpwd');
mysql> select MD5('newpwd');
mysql> select ENCODE('secret','123.com');
二、解密函數
DECODE(crypt_str, pswd_str) 使用 pswd_str 做爲密碼,解密加密字 符串 crypt_str
mysql> select DECODE(ENCODE('secret','cry'),'cry');
5、其餘函數
一、格式化函數
FORMAT(x, n) :將數字 x 格式化,並以四捨五入的方式保留小數點後 n 位,結果 以字符串的形式返回
mysql> select FORMAT(1.23456, 4), FORMAT(1.2, 4), FORMAT(1.234, 0);
二、不一樣進制的數字進行轉換的函數
CONV() :用於不一樣進制數之間的轉換
mysql> select CONV('a',16,2), # 將16進制的a轉換爲2進制 -> CONV(15,10,2), # 將10進制的15轉換爲2進制 -> CONV(15,10,8), # 將10進制的15轉換爲8進制 -> CONV(15,10,16); # 將10進制的15轉換爲16進制
三、 IP 地址與數字互相轉換的函數
INET_ATON(expr) :用於將網絡地址轉 換爲一個表明該地址數值的整數
mysql> select INET_ATON('192.168.1.1');
四、加鎖函數和解鎖函數
GET_LOCK(str, timeout) :使用字符串 str 來獲得一個鎖,持續時間 timeout 秒
- 若成功獲得鎖,則返回 1
- 若操做超時,則返回 0
- 若發生錯誤,則返回 NULL
mysql> select GET_LOCK('lock1',10); # 返回結果爲1,說明成功獲得了一個名稱爲'lock1'的鎖,持續時間爲 10秒
RELEASE_LOCAK(str) :用於解開被 GET_LOCK() 獲取的,用字符串 str 所命名的鎖
- 若鎖被解開,則返回 1
- 若該線程還沒有建立鎖,則返回 0
- 若命名的鎖不存在,則返回 NULL
- 若該鎖從未被 GET_LOCK() 的調用獲取,或鎖已經被提早解開,則該鎖不存在
mysql> select RELEASE_LOCK('lock1'); # 返回值爲1說明解鎖成功
IS_FREE_LOCK(str): 檢查名爲 str 的鎖是否可使用
- 若鎖可使用,則返回 1
- 若鎖正在被使用,則返回 0
- 若出現錯誤,則返回 NULL
mysql> select IS_FREE_LOCK('lock1');
IS_USED_LOCK(str) :用於檢查名爲 str 的鎖是否正在被使用,若被封鎖,則返回使用該鎖的客戶端的鏈接標識 符,不然返回 NULL
mysql> select IS_USED_LOCK('lock1');
五、重複執行指定操做的函數
BENCHMARK(count, expr): 用於重複 count 次執行表 達式 expr
- 能夠用於計算 MySQL 處理表達式的速度
- 能夠在 MySQL 客戶端內部報告語句執行的時間
mysql> select PASSWORD('newpwd'); # # 執行1次加密操做花費了0.00秒
mysql> select BENCHMARK( 500000, PASSWORD('newpwd') ); +-----------------------------------------+ | BENCHMARK( 500000, PASSWORD('newpwd') ) | +-----------------------------------------+ | 0 | +-----------------------------------------+ 1 row in set, 1 warning (0.06 sec) # 執行500000次加密操做花費了0.06秒
六、改變字符集的函數
CONVERT(... USING ...) 用於改變字符串的默認字符集
mysql> select CHARSET('abc'); # 默認是utf8 +----------------+ | CHARSET('abc') | +----------------+ | utf8 | +----------------+ mysql> select CHARSET(CONVERT('abc' USING latin1)); # 轉換成latin1字符集 +--------------------------------------+ | CHARSET(CONVERT('abc' USING latin1)) | +--------------------------------------+ | latin1 | +--------------------------------------+
七、改變數據類型的函數
CAST(x, AS type) :用於將一個數據類型的值轉換 爲另外一個數據類型的值
CONVERT(x, type) :用於將一個數據類型的值轉換爲另外一個數據類型的值
mysql> select CAST(100 AS CHAR(2)); # 將整數類型100轉換爲帶有兩個顯示寬度的字符串類 型,結果爲'10'
mysql> select CONVERT(100,CHAR(2)); # 將整數類型的100轉換爲帶有兩個顯示寬度的字符 串類型,結果爲'10'