MySQL數據庫函數(二)

一、日期和時間函數

1、獲取當前日期的函數
都一樣,用法不同

CURDATE() :用於獲取系統當前日期
CURRENT_DATE() 用於系統獲取當前日期

mysql> select  CURDATE(),CURRENT_DATE(); 

MySQL數據庫函數(二)
2、獲取當前時間的函數

CURTIME() :用於獲取系統當前時間

mysql> select  CURTIME(); 

MySQL數據庫函數(二)
3、獲取當前日期和時間的函數

CURRENT_TIMESTAMP() :用於獲取系統當前日期和時間
LOCALTIME() :用於獲取系統當前日期和時間
NOW() :用於獲取系統當前日期和時間
SYSDATE(): 用於獲取系統當前日期和時間

mysql> select CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();

MySQL數據庫函數(二)
4、獲取時間戳的函數

UNIX_TIMESTAMP() 用於獲取 UNIX 格式的時間戳

mysql> select UNIX_TIMESTAMP(); 

MySQL數據庫函數(二)
時間戳是一份能夠表示一份數據在一個特定時間點已經存在的完整的可驗證的數據。
5、轉換時間戳的函數

FROM_UNIXTIME() 用於將 UNIX 格式的時間戳轉換爲普通格式的時 間

mysql> select  FROM_UNIXTIME(1587693176);         # 添加之前查出的時間戳

MySQL數據庫函數(二)
6、獲取 UTC 日期的函數

UTC_DATE() :用於獲取當前 UTC (世界標準時間) 日期值

mysql> select UTC_DATE();

MySQL數據庫函數(二)
7、獲取 UTC 時間的函數

UTC_TIME() 用於獲取當前 UTC (世界標準時間) 時間值

mysql> select UTC_TIME(); 

MySQL數據庫函數(二)
8、獲取月份的函數

MONTH(date) :用於返回 date 對應的月份
MONTHNAME(date): 用於返回 date 對應月份的英文全名

mysql> select  MONTH('2020-4-24'),MONTHNAME('2020-4-24');

MySQL數據庫函數(二)
9、獲取星期的函數

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');

MySQL數據庫函數(二)
10、獲取天數的函數


DAYOFYEAR(date) :用於返回 date 是一年中的 第幾天,一年有 365 天
DAYOFMONTH(date): 用於計算 date 是一個月中的第幾天

mysql> select DAYOFYEAR('2020-4-24'),DAYOFMONTH('2020-4-24');

MySQL數據庫函數(二)
11、獲取年份的函數

YEAR(date) :返回 date 對應的年份

mysql> select YEAR('20-04-24'),YEAR('98-04-24');

MySQL數據庫函數(二)
12、獲取季度的函數

QUARTER(date) :返回 date 對應的一年中的季度值

mysql> select QUARTER('20-04-24');

MySQL數據庫函數(二)
13、獲取分鐘的函數

MINUTE(time) 返回 time 對應的分鐘值

mysql> select MINUTE('20-04-24 10:18:00');

MySQL數據庫函數(二)
14、獲取秒鐘的函數

SECOND(time) 返回 time 對應的秒數

mysql> select SECOND('10:18:22');

MySQL數據庫函數(二)
15、獲取日期的指定值的函數

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時,返回日、小時、分鐘 

MySQL數據庫函數(二)
16、時間和秒鐘轉換的函數

TIME_TO_SEC(time) :用於將 time 轉換 爲秒鐘,公式爲 " 小時3600 + 分鐘60 + 秒 "
SEC_TO_TIME(time): 用於將秒值轉換爲時間格式

mysql> select TIME_TO_SEC('23:23:00'),SEC_TO_TIME('84180'); 

MySQL數據庫函數(二)
17、計算日期和時間的函數

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數據庫函數(二)
mysql> select DATE_ADD('2020-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND);
MySQL數據庫函數(二)
mysql> select DATE_SUB('2020-01-01', INTERVAL 31 DAY); # 給指定的日期減去31天
MySQL數據庫函數(二)
mysql> select SUBDATE('2020-01-01', INTERVAL 31 DAY);
MySQL數據庫函數(二)
mysql> select ADDTIME('2020-12-31 23:59:59', '1:1:1'); # 給指定的日期增加1時1分1 秒
MySQL數據庫函數(二)
mysql> select SUBTIME('2020-12-31 23:59:59', '1:1:1'); # 給指定的日期減去1時1分1 秒
MySQL數據庫函數(二)
mysql> select DATEDIFF('2020-06-01', '2020-04-24');
MySQL數據庫函數(二)
18、將日期和時間格式化的函數

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數據庫函數(二)
mysql> select TIME_FORMAT('16:00:00', '%H %k %I');
MySQL數據庫函數(二)
mysql> select DATE_FORMAT('2000-10-05 22:23:00', GET_FORMAT(DATE,'USA'));
MySQL數據庫函數(二)

%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);

MySQL數據庫函數(二)
可以看到一併不大於二所以返回v2,也就是3

IFNULL() IFNULL(v1, v2) ,如果 v1 不爲 NULL ,則返回值爲 v1 ;如果 v1 爲 NULL ,則返回值爲 v2

mysql> select IFNULL(1,2),IFNULL(NULL,10);

MySQL數據庫函數(二)

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數據庫函數(二)

三、系統信息函數

1、獲取 MySQL 版本號的函數

VERSION() 用於獲取 MySQL 版本號

mysql> select  VERSION(); 

MySQL數據庫函數(二)
2、查看當前用戶的連接數的ID函數

CONNECTION_ID() 用於查看當前用戶的連接數

mysql> select CONNECTION_ID(); 

MySQL數據庫函數(二)
mysql> show PROCESSLIST; # 查看當前用戶的連接信息
MySQL數據庫函數(二)

**上圖標籤含義如下:**

Id :用戶登錄 MySQL 時,系統分配的連接 id
User :當前連接的用戶
Host :顯示這個語句是從哪個 IP 的哪個端口上發出的,可以用來追蹤出現問題語句的用戶
db :顯示這個進程目前連接的是哪個數據庫
Command :顯示當前連接執行的命令,一般取值爲休眠(Sleep)、查詢(Query)、連接(Connect)
Time :顯示這個狀態持續的時間,單位是秒
State :顯示使用當前連接的 SQL 語句的狀態
Info :顯示這個 SQL 語句

3、查看當前使用的數據庫的函數

DATABASE() :用於查看當前使用的數據庫
SCHEMA(): 用於查看當前使用的數據庫

mysql> select database(),SCHEMA(); 

MySQL數據庫函數(二)
4、查看當前登錄的用戶名的函數

USER() :返回當前登錄的用戶 及主機名
CURRENT_USER(): 用於返回當前登錄的用戶及主機名
SYSTEM_USER() :用於返回當前登錄的用戶及主機名

mysql> select  USER(),CURRENT_USER(),SYSTEM_USER(); 

MySQL數據庫函數(二)
5、查看指定字符串的字符集的函數

CHARSET(str) 用於查看字符串 str 的字符集

mysql> select CHARSET('abc'); 

MySQL數據庫函數(二)
6、查看指定字符串的排列方式的函數


COLLATION(str): 用於查看字符串 str 的字符排列方式

mysql> select COLLATION('abc'); 

MySQL數據庫函數(二)
7、獲取後一個自動生成的 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數據庫函數(二)

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 |
+------------------+

四、加/解密函數
1、加密函數

PASSWORD(str) :從明文密碼 str 計算並返 回加密後的密碼字符串,當參數爲 NULL 時,返回 NULL
MD5(str) 爲字符串 str 算出一個 MD5 128 比特校驗和
ENCODE(str, pswd_str) 使用 pswd_str 作爲密碼,加密 str

mysql> select PASSWORD('newpwd');

MySQL數據庫函數(二)
mysql> select MD5('newpwd');
MySQL數據庫函數(二)
mysql> select ENCODE('secret','123.com');
MySQL數據庫函數(二)
2、解密函數

DECODE(crypt_str, pswd_str) 使用 pswd_str 作爲密碼,解密加密字 符串 crypt_str

mysql> select DECODE(ENCODE('secret','cry'),'cry');

MySQL數據庫函數(二)

三、其他函數

1、格式化函數

FORMAT(x, n) :將數字 x 格式化,並以四捨五入的方式保留小數點後 n 位,結果 以字符串的形式返回

mysql> select FORMAT(1.23456, 4), FORMAT(1.2, 4), FORMAT(1.234, 0); 

MySQL數據庫函數(二)

2、不同進制的數字進行轉換的函數

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進制 

MySQL數據庫函數(二)
3、 IP 地址與數字互相轉換的函數

INET_ATON(expr) :用於將網絡地址轉 換爲一個代表該地址數值的整數

 mysql> select INET_ATON('192.168.1.1');

MySQL數據庫函數(二)
4、加鎖函數和解鎖函數

GET_LOCK(str, timeout) :使用字符串 str 來得到一個鎖,持續時間 timeout 秒

* 若成功得到鎖,則返回 1
* 若操作超時,則返回 0
* 若發生錯誤,則返回 NULL
mysql> select GET_LOCK('lock1',10);            # 返回結果爲1,說明成功得到了一個名稱爲'lock1'的鎖,持續時間爲 10秒 

MySQL數據庫函數(二)

RELEASE_LOCAK(str) :用於解開被 GET_LOCK() 獲取的,用字符串 str 所命名的鎖

* 若鎖被解開,則返回 1
* 若該線程尚未創建鎖,則返回 0
* 若命名的鎖不存在,則返回 NULL
* 若該鎖從未被 GET_LOCK() 的調用獲取,或鎖已經被提前解開,則該鎖不存在
mysql> select RELEASE_LOCK('lock1');          # 返回值爲1說明解鎖成功 

MySQL數據庫函數(二)

IS_FREE_LOCK(str): 檢查名爲 str 的鎖是否可以使用

* 若鎖可以使用,則返回 1
* 若鎖正在被使用,則返回 0
* 若出現錯誤,則返回 NULL
mysql> select IS_FREE_LOCK('lock1');

MySQL數據庫函數(二)

IS_USED_LOCK(str) :用於檢查名爲 str 的鎖是否正在被使用,若被封鎖,則返回使用該鎖的客戶端的連接標識 符,否則返回 NULL

mysql> select IS_USED_LOCK('lock1');

MySQL數據庫函數(二)
5、重複執行指定操作的函數

BENCHMARK(count, expr): 用於重複 count 次執行表 達式 expr

* 可以用於計算 MySQL 處理表達式的速度
* 可以在 MySQL 客戶端內部報告語句執行的時間
mysql> select PASSWORD('newpwd');         # # 執行1次加密操作花費了0.00秒 

MySQL數據庫函數(二)

mysql> select BENCHMARK( 500000, PASSWORD('newpwd') ); 
+-----------------------------------------+
| BENCHMARK( 500000, PASSWORD('newpwd') ) |
+-----------------------------------------+
|                                       0 |
+-----------------------------------------+
1 row in set, 1 warning (0.06 sec)                # 執行500000次加密操作花費了0.06秒 

6、改變字符集的函數

CONVERT(... USING ...) 用於改變字符串的默認字符集

mysql> select CHARSET('abc');               # 默認是utf8
+----------------+
| CHARSET('abc') |
+----------------+
| utf8           |
+----------------+
mysql> select CHARSET(CONVERT('abc' USING latin1));                  #  轉換成latin1字符集
+--------------------------------------+
| CHARSET(CONVERT('abc' USING latin1)) |
+--------------------------------------+
| latin1                               |
+--------------------------------------+

7、改變數據類型的函數

CAST(x, AS type) :用於將一個數據類型的值轉換 爲另一個數據類型的值
CONVERT(x, type) :用於將一個數據類型的值轉換爲另一個數據類型的值

mysql> select CAST(100 AS CHAR(2));       # 將整數類型100轉換爲帶有兩個顯示寬度的字符串類 型,結果爲'10' 

MySQL數據庫函數(二)
mysql> select CONVERT(100,CHAR(2)); # 將整數類型的100轉換爲帶有兩個顯示寬度的字符 串類型,結果爲'10'
MySQL數據庫函數(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章