MySQL函數(shù):IFNULL蔬顾,ORD露氮,MID

轉(zhuǎn)載自:
http://www.nowamagic.net/academy/detail/3203050
http://www.nowamagic.net/academy/detail/3203051
http://www.nowamagic.net/academy/detail/3203052

1. MySQL常用自帶函數(shù)

    1. [MySQL IFNULL()函數(shù)用法]
    1. [MySQL MID()函數(shù)用法]
    1. [MySQL ORD()函數(shù)用法]

2. IFNULL()函數(shù)用法

用法說明:IFNULL(expr1,expr2)
如果 expr1 不是 NULL,IFNULL() 返回 expr1含长,否則它返回 expr2券腔。

IFNULL()返回一個數(shù)字或字符串值,取決于它被使用的上下文環(huán)境拘泞。

我們先舉一些例子:

mysql> SELECT IFNULL(1,0);
+-------------+
| IFNULL(1,0) |
+-------------+
|           1 |
+-------------+
1 row in set

??由于 expr1 是 1纷纫,不為 NULL,所以函數(shù)返回 1. 我們可以再試下陪腌,如果讓 expr1 為 NULL辱魁,是否能返回第二個參數(shù)呢? 不妨讓 expr1 = 1/0诗鸭, 由于除數(shù)為0染簇,結(jié)果就為 NULL 了。

mysql> SELECT IFNULL(1/0,'NowaMagic');
+-------------------------+
| IFNULL(1/0,'NowaMagic') |
+-------------------------+
| NowaMagic               |
+-------------------------+
1 row in set

前面的參數(shù)為 NULL强岸,就返回第二個參數(shù) NowaMagic 了锻弓。

??這個函數(shù)不難理解,為什么要介紹這個函數(shù)呢蝌箍?這是為了后面講述 MySQL 下的高級黑客技術(shù)做的基礎(chǔ)知識準備弥咪,你可以先試著理解這么一句 hack SQL:

UPDATE table SET views = '1' WHERE id = -2441 OR (ORD(
MID(
(SELECT IFNULL(CAST(FirstName AS CHAR),0x20) 
FROM nowamagic.`tb2` ORDER BY id LIMIT 1,1),2,1)
)>112)#

里面用到了 IFNULL 這個函數(shù)过蹂,你了解它的作用嗎?

3.MID()函數(shù)用法

在前面的 hack 語句中:

UPDATE table SET views = '1' WHERE id = -2441 OR (ORD(
MID(
(SELECT IFNULL(CAST(FirstName AS CHAR),0x20) 
FROM nowamagic.`tb2` ORDER BY id LIMIT 1,1),2,1)
)>112)#

我們注意到它用了 MySQL自帶的函數(shù) MID聚至,那么它的作用是什么呢酷勺?

MID()函數(shù)

??SQL MID() 函數(shù)用于得到一個字符串的一部分。這個函數(shù)被MySQL支持扳躬,但不被MS SQL Server和Oracle支持脆诉。在SQL Server, Oracle 數(shù)據(jù)庫中贷币,我們可以使用 SQL SUBSTRING函數(shù)或者 SQL SUBSTR函數(shù)作為替代击胜。

MID() 函數(shù)語法為:

SELECT MID(ColumnName, Start [, Length]) FROM TableName

注:字符串從1開始,而非0役纹,Length是可選項偶摔,如果沒有提供,MID()函數(shù)將返回余下的字符串促脉。

舉個簡單的例子吧:

SELECT MID('NowaMagic', 5, 5);
+------------------------+
| MID('NowaMagic', 5, 5) |
+------------------------+
| Magic                  |
+------------------------+
1 row in set

就這么簡單的一個函數(shù)辰斋,講完了~

ORD()函數(shù)用法

接下來我們再來看看 MySQL 自帶的 ORD() 這個函數(shù)有什么作用。

ORD() 函數(shù)

ORD() 函數(shù)返回字符串第一個字符的ASCII值瘸味。

語法: ORD(string)

舉一些簡單的例子:

mysql> SELECT ORD('i');
+----------+
| ORD('i') |
+----------+
|      105 |
+----------+
1 row in set

或者:

mysql> SELECT ORD('NowaMagic');
+------------------+
| ORD('NowaMagic') |
+------------------+
|               78 |
+------------------+
1 row in set

如果漢字又如何呢宫仗?

mysql> SELECT ORD('簡明現(xiàn)代魔法');
+---------------------+
| ORD('簡明現(xiàn)代魔法') |
+---------------------+
|            15183488 |
+---------------------+
1 row in set

mysql> SELECT ORD('簡');
+-----------+
| ORD('簡') |
+-----------+
|  15183488 |
+-----------+
1 row in set
  • 為什么會有 8 位數(shù)那么長呢?原因是數(shù)據(jù)庫使用的字符集問題旁仿,此處的數(shù)據(jù)庫使用的是 UTF-8藕夫,16位表示一個符號。順便貼一下SQL的執(zhí)行語句:
mysql> SHOW CHARACTER SET;
+----------+-----------------------------+---------------------+--------+
| Charset  | Description                 | Default collation   | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5     | Big5 Traditional Chinese    | big5_chinese_ci     |      2 |
| dec8     | DEC West European           | dec8_swedish_ci     |      1 |
| cp850    | DOS West European           | cp850_general_ci    |      1 |
| hp8      | HP West European            | hp8_english_ci      |      1 |
| koi8r    | KOI8-R Relcom Russian       | koi8r_general_ci    |      1 |
| latin1   | cp1252 West European        | latin1_swedish_ci   |      1 |
| latin2   | ISO 8859-2 Central European | latin2_general_ci   |      1 |
| swe7     | 7bit Swedish                | swe7_swedish_ci     |      1 |
| ascii    | US ASCII                    | ascii_general_ci    |      1 |
| ujis     | EUC-JP Japanese             | ujis_japanese_ci    |      3 |
| sjis     | Shift-JIS Japanese          | sjis_japanese_ci    |      2 |
| hebrew   | ISO 8859-8 Hebrew           | hebrew_general_ci   |      1 |
| tis620   | TIS620 Thai                 | tis620_thai_ci      |      1 |
| euckr    | EUC-KR Korean               | euckr_korean_ci     |      2 |
| koi8u    | KOI8-U Ukrainian            | koi8u_general_ci    |      1 |
| gb2312   | GB2312 Simplified Chinese   | gb2312_chinese_ci   |      2 |
| greek    | ISO 8859-7 Greek            | greek_general_ci    |      1 |
| cp1250   | Windows Central European    | cp1250_general_ci   |      1 |
| gbk      | GBK Simplified Chinese      | gbk_chinese_ci      |      2 |
| latin5   | ISO 8859-9 Turkish          | latin5_turkish_ci   |      1 |
| armscii8 | ARMSCII-8 Armenian          | armscii8_general_ci |      1 |
| utf8     | UTF-8 Unicode               | utf8_general_ci     |      3 |
| ucs2     | UCS-2 Unicode               | ucs2_general_ci     |      2 |
| cp866    | DOS Russian                 | cp866_general_ci    |      1 |
| keybcs2  | DOS Kamenicky Czech-Slovak  | keybcs2_general_ci  |      1 |
| macce    | Mac Central European        | macce_general_ci    |      1 |
| macroman | Mac West European           | macroman_general_ci |      1 |
| cp852    | DOS Central European        | cp852_general_ci    |      1 |
| latin7   | ISO 8859-13 Baltic          | latin7_general_ci   |      1 |
| utf8mb4  | UTF-8 Unicode               | utf8mb4_general_ci  |      4 |
| cp1251   | Windows Cyrillic            | cp1251_general_ci   |      1 |
| utf16    | UTF-16 Unicode              | utf16_general_ci    |      4 |
| cp1256   | Windows Arabic              | cp1256_general_ci   |      1 |
| cp1257   | Windows Baltic              | cp1257_general_ci   |      1 |
| utf32    | UTF-32 Unicode              | utf32_general_ci    |      4 |
| binary   | Binary pseudo charset       | binary              |      1 |
| geostd8  | GEOSTD8 Georgian            | geostd8_general_ci  |      1 |
| cp932    | SJIS for Windows Japanese   | cp932_japanese_ci   |      2 |
| eucjpms  | UJIS for Windows Japanese   | eucjpms_japanese_ci |      3 |
+----------+-----------------------------+---------------------+--------+
39 rows in set
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末枯冈,一起剝皮案震驚了整個濱河市毅贮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尘奏,老刑警劉巖嫩码,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異罪既,居然都是意外死亡铸题,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門琢感,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丢间,“玉大人,你說我怎么就攤上這事驹针『娲欤” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長饮六。 經(jīng)常有香客問我其垄,道長,這世上最難降的妖魔是什么卤橄? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任绿满,我火速辦了婚禮,結(jié)果婚禮上窟扑,老公的妹妹穿的比我還像新娘喇颁。我一直安慰自己,他們只是感情好嚎货,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布橘霎。 她就那樣靜靜地躺著,像睡著了一般殖属。 火紅的嫁衣襯著肌膚如雪姐叁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天洗显,我揣著相機與錄音外潜,去河邊找鬼。 笑死墙懂,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的扮念。 我是一名探鬼主播损搬,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼柜与!你這毒婦竟也來了巧勤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤弄匕,失蹤者是張志新(化名)和其女友劉穎颅悉,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體迁匠,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡剩瓶,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了城丧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片延曙。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖亡哄,靈堂內(nèi)的尸體忽然破棺而出枝缔,到底是詐尸還是另有隱情,我是刑警寧澤蚊惯,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布愿卸,位于F島的核電站灵临,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏趴荸。R本人自食惡果不足惜儒溉,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望赊舶。 院中可真熱鬧睁搭,春花似錦、人聲如沸笼平。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寓调。三九已至锌唾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夺英,已是汗流浹背晌涕。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痛悯,地道東北人余黎。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像载萌,于是被迫代替她去往敵國和親惧财。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 在你的特殊關(guān)系中扭仁,當你渴望著另一個人來證實那個你認為你是誰的本質(zhì)時垮衷,這只是一種形式,這并不是愛乖坠,而是憎恨搀突。我在兩千...
    道惟閱讀 287評論 0 0
  • 需求 客戶希望通過spark來分析二進制文件中0和1的數(shù)量以及占比。如果要分析的是目錄熊泵,則針對目錄下的每個文件單獨...
    _張逸_閱讀 3,678評論 0 0