MySQL介紹一下其他函數(shù)

MySQL介紹一下其他函數(shù)

其他函數(shù)

(1)格式化函數(shù)format(x,n)
(2)不同進(jìn)制的數(shù)字進(jìn)行轉(zhuǎn)換的函數(shù)
(3)IP地址與數(shù)字相互轉(zhuǎn)換的函數(shù)
(4)加鎖函數(shù)與解鎖函數(shù)
(5)重復(fù)執(zhí)行指定操作的函數(shù)
(6)改變字符集的函數(shù)
(7)改變數(shù)據(jù)類型的函數(shù)

(免費(fèi)學(xué)習(xí)推薦:mysql視頻教程

(1)、格式化函數(shù)format(x,n)
  • format(x,n)將數(shù)字x格式化,并以四舍五入的方式保留小數(shù)點(diǎn)后n位,結(jié)果以字符串的形式返回。若n為0,則返回結(jié)果函數(shù)不含小數(shù)部分。
mysql> select format(12332.123456,4),format(12332.1,4),format(12332.2,0);+------------------------+-------------------+-------------------+| format(12332.123456,4) | format(12332.1,4) | format(12332.2,0) |+------------------------+-------------------+-------------------+| 12,332.1235            | 12,332.1000       | 12,332            |+------------------------+-------------------+-------------------+1 row in set (0.00 sec)

(2)、不同進(jìn)制的數(shù)字進(jìn)行轉(zhuǎn)換的函數(shù)
  • conv(n,from_base,to_base)函數(shù)進(jìn)行不同進(jìn)制數(shù)之間的轉(zhuǎn)換,若有一個(gè)參數(shù)為NULL,則返回值為null。

【例】使用conv函數(shù)在不同進(jìn)制數(shù)值之間轉(zhuǎn)換,SQL語(yǔ)句如下:

mysql> select conv('a',16,2),     -> conv(15,10,2),     -> conv(15,10,8),     -> conv(15,10,16);+----------------+---------------+---------------+----------------+| conv('a',16,2) | conv(15,10,2) | conv(15,10,8) | conv(15,10,16) |+----------------+---------------+---------------+----------------+| 1010           | 1111          | 17            | F              |+----------------+---------------+---------------+----------------+1 row in set (0.01 sec)
進(jìn)制 說(shuō)明
二進(jìn)制 采用0和1兩個(gè)數(shù)字來(lái)表示的數(shù),以2為基數(shù),逢二進(jìn)一
八進(jìn)制 采用0-7八個(gè)數(shù)字,逢八進(jìn)一,以數(shù)字0開(kāi)頭
十進(jìn)制 采用0-9共十個(gè)數(shù)字表示,逢十進(jìn)一
十六進(jìn)制 由0-9,A-F組成,與十進(jìn)制的對(duì)應(yīng)關(guān)系是:0-9對(duì)應(yīng)0-9,A-F對(duì)應(yīng)10-15,十六進(jìn)制數(shù)以0x開(kāi)頭

(3)、IP地址與數(shù)字相互轉(zhuǎn)換的函數(shù)

1.inet_aton()

  • inet_aton(expr)給出一個(gè)作為字符串的網(wǎng)絡(luò)地址的點(diǎn)地址表示,返回一個(gè)代表該地址數(shù)值的整數(shù),地址可以是4bit或8bit地址。

【例】使用inet_aton()函數(shù)將字符串網(wǎng)絡(luò)點(diǎn)地址轉(zhuǎn)換為數(shù)值網(wǎng)絡(luò)地址,SQL語(yǔ)句如下:

  • 產(chǎn)生的數(shù)字按照網(wǎng)絡(luò)字節(jié)順序計(jì)算,此例子計(jì)算方法為:209*256^3+207*256^2+224*256+40。
mysql> select inet_aton('209.207.224.40');+-----------------------------+| inet_aton('209.207.224.40') |+-----------------------------+|                  3520061480 |+-----------------------------+1 row in set (0.00 sec)

2.inet_ntoa()

  • inet_ntoa(expr)給定一個(gè)數(shù)字網(wǎng)絡(luò)地址(4bit或8bit),返回作為字符串的該地址的點(diǎn)地址表示。
  • inet_ntoa函數(shù)與inet_aton互為反函數(shù)。

【例】使用iner_ntoa函數(shù)將數(shù)值網(wǎng)絡(luò)地址轉(zhuǎn)換為字符串網(wǎng)絡(luò)點(diǎn)地址,SQL語(yǔ)句如下:

mysql> select inet_ntoa(3520061480);+-----------------------+| inet_ntoa(3520061480) |+-----------------------+| 209.207.224.40        |+-----------------------+1 row in set (0.00 sec)

(4)、加鎖函數(shù)與解鎖函數(shù)

1.get_lock(str,timeout)設(shè)法使用字符串str給定的名字得到一個(gè)鎖,超時(shí)為timeout秒。若成功得到鎖,則返回1;若操作超時(shí)返回0;若發(fā)生錯(cuò)誤,返回null。
假如有一個(gè)用get_lock()得到的鎖,當(dāng)執(zhí)行release_lock()或鏈接斷開(kāi)(正常或非正常)時(shí),這個(gè)鎖就會(huì)解除。

2.release_lock(str)解開(kāi)被get_lock()獲取的,用字符串str所命名的鎖。若鎖被解開(kāi),則返回1;若該線程尚未創(chuàng)建鎖,則返回0(此時(shí)鎖沒(méi)有被解開(kāi));若命名的鎖不存在,則返回null。若該鎖從未被get_lock()的調(diào)用獲取,或鎖已經(jīng)被提前解開(kāi),則該鎖不存在。

3.is_free_lock(str)檢查名為str的鎖是否可以使用(沒(méi)有被封鎖)。若鎖可以使用,則返回1(沒(méi)有人在使用這個(gè)鎖);若這個(gè)鎖正在被使用,則返回0;出現(xiàn)錯(cuò)誤,則返回null(諸如不正確的參數(shù))。

4.is_used_lock(str)檢查名為str的鎖是否正在被使用(被封鎖)。若被封鎖,則返回使用該鎖的客戶端的連接標(biāo)識(shí)符(connectionID);否則,返回null。

【例】使用加鎖、解鎖函數(shù),SQL語(yǔ)句如下:

mysql> select get_lock('lock1',10) as getlock,     -> is_used_lock('lock1') as isusedlock,     -> is_free_lock('lock1') as isfreelock,     -> release_lock('lock1') as releaselock;+---------+------------+------------+-------------+| getlock | isusedlock | isfreelock | releaselock |+---------+------------+------------+-------------+|       1 |         21 |          0 |           1 |+---------+------------+------------+-------------+1 row in set (0.05 sec)

(5)、重復(fù)執(zhí)行指定操作的函數(shù)

– benchmark(count,expr)函數(shù)重復(fù)執(zhí)行表達(dá)式(expr)count次。它可以用于計(jì)算MySQL處理表達(dá)式的速度。結(jié)果值通常為0,(0只是表示處理過(guò)程很快,并不是沒(méi)有花時(shí)間)。另一個(gè)作用是它可以在MySQL客戶端內(nèi)部報(bào)告語(yǔ)句執(zhí)行的時(shí)間。

【例】使用benchmark重復(fù)執(zhí)行指定函數(shù)

  • 可以看到下面語(yǔ)句執(zhí)行500000次的時(shí)間為0.38sec,明顯比執(zhí)行一次的時(shí)間提高了。
mysql> select md5('Hudie');+----------------------------------+| md5('Hudie')                     |+----------------------------------+| 3fe2017e5cb984400c5271ef77a840f6 |+----------------------------------+1 row in set (0.00 sec)mysql> select benchmark(500000,md5('Hudie'));+--------------------------------+| benchmark(500000,md5('Hudie')) |+--------------------------------+|                              0 |+--------------------------------+1 row in set (0.38 sec)

注意:
benchmark報(bào)告的時(shí)間是客戶端經(jīng)過(guò)的時(shí)間,而不是在服務(wù)器端的CPU時(shí)間,每次執(zhí)行后報(bào)告的時(shí)間并不一定是相同的。


(6)、改變字符集的函數(shù)
  • convert(…using…)帶有using的convert()函數(shù)被用來(lái)在不同的字符集之間轉(zhuǎn)化數(shù)據(jù)。

【例】使用convert()函數(shù)改變字符串的默認(rèn)字符集,SQL語(yǔ)句如下;

mysql> select charset(' string '),charset( convert(' string ' using latin1 ) );+---------------------+----------------------------------------------+| charset(' string ') | charset( convert(' string ' using latin1 ) ) |+---------------------+----------------------------------------------+| gbk                 | latin1                                       |+---------------------+----------------------------------------------+1 row in set (0.00 sec)

默認(rèn)為gbk字符集,通過(guò)convert將字符串”strng”的默認(rèn)字符集改為latin1。


(7)、改變數(shù)據(jù)類型的函數(shù)

– case(x,as type)和convert(x,type)函數(shù)將一個(gè)類型的值轉(zhuǎn)換為另一個(gè)類型的值,可以轉(zhuǎn)換的type值有binary、char(n)、date、time、datetime、decimal、signed、unsigned。

【例】使用case和convert函數(shù)進(jìn)行數(shù)據(jù)類型的轉(zhuǎn)換,SQL語(yǔ)句如下:

mysql> select cast(100 as char(2)),convert(' 2019-08-20 00:32:01 ',time);+----------------------+---------------------------------------+| cast(100 as char(2)) | convert(' 2019-08-20 00:32:01 ',time) |+----------------------+---------------------------------------+| 10                   | 00:32:01                              |+----------------------+---------------------------------------+1 row in set, 1 warning (0.05 sec)

可以看到,case(100 as char(2))將整數(shù)數(shù)據(jù)類型100轉(zhuǎn)換為帶有兩個(gè)顯示寬度的字符串類型,結(jié)果為“10”;convert(‘2010-08-20 00:32:01’)將datetime類型的值轉(zhuǎn)換為time類型,結(jié)果為00:32:01。

更多相關(guān)免費(fèi)學(xué)習(xí)推薦:mysql教程(視頻)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊13 分享