《SQL必知必會》第 8 課 使用函數(shù)處理數(shù)據(jù)

目標(biāo):

8.1 函數(shù)

8.2 使用函數(shù)

這一課介紹什么是函數(shù)展东,DBMS 支持何種函數(shù),以及如何使用這些函數(shù)炒俱;還將講解為什么 SQL 函數(shù)的使用可能會帶來問題盐肃。



8.1 函數(shù)

可移植(portable)所編寫的代碼可以在多個系統(tǒng)上運行爪膊。


8.2 使用函數(shù)

大多數(shù) SQL 實現(xiàn)支持以下類型的函數(shù)。

1. 用于處理文本字符串(如刪除或填充值砸王,轉(zhuǎn)換值為大寫或小寫)的文本函數(shù)推盛。

2. 用于在數(shù)值數(shù)據(jù)上進(jìn)行算術(shù)操作(如返回絕對值,進(jìn)行代數(shù)運算)的數(shù)值函數(shù)谦铃。

3. 用于處理日期和時間值并從這些值中提取特定成分(如返回兩個日期之差耘成,檢查日期有效性)的日期和時間函數(shù)。

4. 用于生成美觀好懂的輸出內(nèi)容的格式化函數(shù)(如用語言形式表達(dá)出日期驹闰,用貨幣符號和千分位表示金額)瘪菌。

5. 返回 DBMS 正使用的特殊信息(如返回用戶登錄信息)的系統(tǒng)函數(shù)

8.2.1 文本處理函數(shù)

SELECT vend_name,?

? ? ? ? ? ? ? ?UPPER(vend_name) AS vend_name_upcase?

FROM Vendors?

ORDER BY vend_name;

輸出:


SOUNDEX() 函數(shù)

是一個將任何文本串轉(zhuǎn)換為描述其語音表示的字母數(shù)字模式的算法疮方。使用函數(shù)處理數(shù)據(jù)類似的發(fā)音字符和音節(jié)控嗜,使得能對字符串進(jìn)行發(fā)音比較而不是字母比較。雖然 SOUNDEX 不是SQL 概念骡显,但多數(shù) DBMS 都提供對 SOUNDEX 的支持疆栏。

SELECT cust_name, cust_contact

FROM Customers

WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');

分析▼

在這個例子中,WHERE 子句使用 SOUNDEX()函數(shù)把 cust_contact 列值和搜索字符串轉(zhuǎn)換為它們的 SOUNDEX 值惫谤。因為 Michael Green 和Michelle Green 發(fā)音相似壁顶,所以它們的 SOUNDEX 值匹配,因此 WHERE子句正確地過濾出了所需的數(shù)據(jù)溜歪。

輸出:



8.2.2 日期和時間處理函數(shù)

很不一致若专,可移植性最差。

要求:MySQL使用名為 YEAR()的函數(shù)從日期中提取年份

SELECT order_num

FROM Orders

WHERE YEAR(order_date) = 2020;

輸出:

8.2.3 數(shù)值處理函數(shù)

數(shù)值處理函數(shù)僅處理數(shù)值數(shù)據(jù)蝴猪。這些函數(shù)一般主要用于代數(shù)调衰、三角或幾何運算,因此不像字符串或日期?時間處理函數(shù)使用那么頻繁自阱。

在主要 DBMS 的函數(shù)中嚎莉,數(shù)值函數(shù)是最一致、最統(tǒng)一的函數(shù)沛豌。

8.3 小結(jié)

這一課介紹了如何使用 SQL 的數(shù)據(jù)處理函數(shù)趋箩。雖然這些函數(shù)在格式化、處理和過濾數(shù)據(jù)中非常有用加派,但它們在各種 SQL 實現(xiàn)中很不一致叫确。

-- ----------第8課 使用函數(shù)處理數(shù)據(jù)---------------------

-- 8.2.1 文本處理函數(shù)

SELECT vend_name, UPPER(vend_name) AS vend_name_upcase

FROM Vendors

ORDER BY vend_name;

SELECT cust_name, cust_contact

FROM Customers

WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');

-- 8.2.2 日期和時間處理函數(shù)


8.4 挑戰(zhàn)題

1. 我們的商店已經(jīng)上線了,正在創(chuàng)建顧客賬戶芍锦。所有用戶都需要登錄名竹勉,默認(rèn)登錄名是其名稱和所在城市的組合。編寫 SQL 語句醉旦,返回顧客 ID(cust_id)饶米、顧客名稱(customer_name)和登錄名(user_login)桨啃,其中登錄名全部為大寫字母,并由顧客聯(lián)系人的前兩個字符(cust_contact)和其所在城市的前三個字符(cust_city)組成檬输。例如照瘾,我的登錄名是 BEOAK(Ben Forta,居住在 Oak Park)丧慈。提示:需要使用函數(shù)析命、拼接和別名。

SELECT cust_id, cust_name,

? ? ? ? CONCAT(UPPER(LEFT(cust_contact, 2)), UPPER(LEFT(cust_city, 3))) AS user_login

FROM customers;

2. 編寫 SQL 語句逃默,返回 2020 年 1 月的所有訂單的訂單號(order_num)和訂單日期(order_date)鹃愤,并按訂單日期排序。你應(yīng)該能夠根據(jù)目前已學(xué)的知識來解決此問題完域,但也可以開卷查閱 DBMS 文檔软吐。

SELECT order_num, order_date

FROM Orders

WHERE YEAR(order_date) = 2020 AND MONTH(order_date) = 1

ORDER BY order_date

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吟税,隨后出現(xiàn)的幾起案子凹耙,更是在濱河造成了極大的恐慌,老刑警劉巖肠仪,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肖抱,死亡現(xiàn)場離奇詭異,居然都是意外死亡异旧,警方通過查閱死者的電腦和手機(jī)意述,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吮蛹,“玉大人荤崇,你說我怎么就攤上這事〕闭耄” “怎么了天试?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長然低。 經(jīng)常有香客問我,道長务唐,這世上最難降的妖魔是什么雳攘? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮枫笛,結(jié)果婚禮上吨灭,老公的妹妹穿的比我還像新娘。我一直安慰自己刑巧,他們只是感情好喧兄,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布无畔。 她就那樣靜靜地躺著,像睡著了一般吠冤。 火紅的嫁衣襯著肌膚如雪浑彰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天拯辙,我揣著相機(jī)與錄音郭变,去河邊找鬼。 笑死涯保,一個胖子當(dāng)著我的面吹牛诉濒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夕春,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼未荒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了及志?” 一聲冷哼從身側(cè)響起片排,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎困肩,沒想到半個月后划纽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡锌畸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年勇劣,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潭枣。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡比默,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盆犁,到底是詐尸還是另有隱情命咐,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布谐岁,位于F島的核電站醋奠,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伊佃。R本人自食惡果不足惜窜司,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望航揉。 院中可真熱鬧塞祈,春花似錦、人聲如沸帅涂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至斯议,卻和暖如春产捞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捅位。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工轧葛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人艇搀。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓尿扯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親焰雕。 傳聞我的和親對象是個殘疾皇子衷笋,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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