創(chuàng)建計(jì)算字段
有的時(shí)候我們需要直接從數(shù)據(jù)庫中檢索出轉(zhuǎn)換、計(jì)算或格式化過的數(shù)據(jù);而不是檢索出數(shù)據(jù),然后在客戶機(jī)應(yīng)用程序或報(bào)告程序中重新格式化。
這就會計(jì)算字段發(fā)揮作用的所在了。
<u>計(jì)算字段并不實(shí)際存在于數(shù)據(jù)庫表中。計(jì)算字段你是運(yùn)行時(shí)再select語句內(nèi)創(chuàng)建的。</u>
字段(field)基本上與列(column)的意思相同,經(jīng)常互換使用,不過數(shù)據(jù)庫列一般稱為列,而術(shù)語字段通常用在計(jì)算字段的連接上。
一、拼接字段
為了說明如何使用計(jì)算字段,舉一個(gè)創(chuàng)建由兩列組成的標(biāo)題的簡單例子。
拼接(concatenate)將值聯(lián)結(jié)到一起構(gòu)成單個(gè)值
解決辦法就是把兩個(gè)列拼接起來。在Mysql的select語句中,可使用Concat()函數(shù)來拼接兩個(gè)列。
多數(shù)DBMS使用+或||來實(shí)現(xiàn)拼接,Mysql則使用Concat()函數(shù)來實(shí)現(xiàn)。當(dāng)把Sql語句轉(zhuǎn)換成mysql語句時(shí)一定要把這個(gè)區(qū)別銘記在心。
mysql>select Concat(vend_name,‘(’,vend_contry,‘)’) from venders order by vend_name;
Concat()拼接串,即把多個(gè)串連接起來形成一個(gè)較長的串。
得到以下輸出:
Concat(vend_name,‘(’,vend_contry,‘)’) ACME(USA) Anvils R Us (USA)
曾提到過通過刪除右側(cè)多余的空格來整理數(shù)據(jù),這可以使用MySQL的RTrim()函數(shù)來完成
mysql>select Concat(RTrim(vend_name),‘(’,RTrim(vend_contry),‘)’) from vendors order by vend_name;
RTrim()函數(shù)去掉值右邊的所有空格。通過使用RTrim(),個(gè)格列都進(jìn)行了整理。
MySQL除了支持RTrim()去掉右邊的空格,
還支持LTrim()去掉串左邊的空格
以及Trim()去掉串左右兩邊的空格
二、使用別名
別名(alias)是一個(gè)字段或值的替換名。別名用AS關(guān)鍵字賦予。
mysql>select Concat(RTrim(vend_name),‘(’,RTrim(vend_contry),‘)’) AS vend_title from vendors order by vend_name
得到以下輸出:
| vend_title |
|---|
| ACME(USA) |
| Anvils R Us (USA) |
別名有時(shí)也稱為導(dǎo)出列(derived column),不管稱為什么,它們所代表的都是相同的東西。
三、執(zhí)行算術(shù)計(jì)算
mysql>select prod_id, quantitym,item_price from orderitems where order_num = 2005;
mysql>select prod_id,quantity,item_price,quantity * item_price AS expanded_price from orderitems where order_num = 20005;
| 操作符 | 說明 |
|---|---|
| + | 加 |
| - | 減 |
| * | 乘 |
| / | 除 |
這里提到一個(gè)mysql提供的友好測試方法
select 3*2 ; -> 返回 6
select Trim(‘a(chǎn)bc’); -> 返回abc
select Now()利用Now()函數(shù)返回當(dāng)前日期和時(shí)間