MySQL必知必會十:創建計算字段

10.1 拼接字段

字段(field) 基本上與列( column) 的意思相同,經常互換使用,不過數據庫列一般稱爲列,而術語字段通常用在計算字段的連接上。

拼接(concatenate) 將值聯結到一起構成單個值。

解決辦法是把兩個列拼接起來。在MySQL的SELECT語句中,可使用Concat()函數來拼接兩個列。

mysql> SELECT Concat(vend_name, '(', vend_country, ')') FROM vendors ORDER BY vend_name;
+-----------------------------------------------+
| Concat(vend_name, '(', vend_country, ')')   |
+-----------------------------------------------+
| ACME(USA)                                   |
| Anvils R Us(USA)                            |
| Furball Inc.(USA)                           |
| Jet Set(England)                            |
| Jouets Et Ours(France)                      |
| LT Supplies(USA)                            |
+-----------------------------------------------+
  • 分析:Concat()拼接串,即把多個串連接起來形成一個較長的串。Concat()需要一個或多個指定的串,各個串之間用逗號分隔。
  • 上面的SELECT語句連接以下4個元素:
    • 存儲在vend_name列中的名字;
    • 包含一個空格和一個左圓括號的串;
    • 存儲在vend_country列中的國家;
    • 包含一個右圓括號的串。

刪除數據右側多餘的空格來整理數據,這可以使用MySQL的RTrim()函數來完成,如下所示:

mysql> SELECT Concat(RTrim(vend_name), '(', RTrim('vend_country'), ')') FROM vendors ORDER BY vend_name;
+-------------------------------------------------------------+
| Concat(RTrim(vend_name), '(', RTrim('vend_country'), ')')  |
+-------------------------------------------------------------+
| ACME(vend_country)                                         |
| Anvils R Us(vend_country)                                  |
| Furball Inc.(vend_country)                                 |
| Jet Set(vend_country)                                      |
| Jouets Et Ours(vend_country)                               |
| LT Supplies(vend_country)                                  |
+-------------------------------------------------------------+
  • 分析:RTrim()函數去掉值右邊的所有空格。通過使用RTrim(),各個列都進行了整理。

Trim函數 MySQL除了支持RTrim()(正如剛纔所見,它去掉串右邊的空格),還支持LTrim()(去掉串左邊的空格)以及Trim()(去掉串左右兩邊的空格)。

SQL支持列別名。 別名( alias) 是一個字段或值的替換名。別名用AS關鍵字賦予。請看下面的SELECT語句:

mysql> SELECT Concat(RTrim(vend_name), '(', RTrim('vend_country'), ')') AS vend_title  FROM vendors ORDER BY vend_name;
+--------------------------------+
| vend_title                     |
+--------------------------------+
| ACME(vend_country)            |
| Anvils R Us(vend_country)     |
| Furball Inc.(vend_country)    |
| Jet Set(vend_country)         |
| Jouets Et Ours(vend_country)  |
| LT Supplies(vend_country)     |
+--------------------------------+
  • 分析:SELECT語句本身與以前使用的相同,只不過這裏的語句中計算字段之後跟了文本AS vend_title。它指示SQL創建一個包含指定計算的名爲vend_title的計算字段。從輸出中可以看到,結果與以前的相同,但現在列名爲vend_title,任何客戶機應用都可以按名引用這個列,就像它是一個實際的表列一樣。

別名的其他用途:別名還有其他用途。常見的用途包括在實際的表列名包含不符合規定的字符(如空格)時重新命名它,在原來的名字含混或容易誤解時擴充它,等等。
導出列:別名有時也稱爲導出列( derived column),不管稱爲什麼,它們所代表的都是相同的東西。

10.2 執行算術計算

彙總物品的價格(單價乘以訂購數量):

mysql> SELECT prod_id, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005;
+---------+----------+------------+----------------+
| prod_id | quantity | item_price | expanded_price |
+---------+----------+------------+----------------+
| ANV01   |       10 |       5.99 |          59.90 |
| ANV02   |        3 |       9.99 |          29.97 |
| TNT2    |        5 |      10.00 |          50.00 |
| FB      |        1 |      10.00 |          10.00 |
+---------+----------+------------+----------------+
  • 分析:輸出中顯示的expanded_price列爲一個計算字段,此計算爲quantity*item_price。客戶機應用現在可以使用這個新計算列,就像使用其他列一樣。
操 作 符 說 明
+
-
*
/

如何測試計算SELECT提供了測試和試驗函數與計算的一個很好的辦法。雖然SELECT通常用來從表中檢索數據,但可以省略FROM子句以便簡單地訪問和處理表達式。例如, SELECT 3*2;將返回6SELECT Trim('abc ');將返回abc,而SELECT Now()利用Now()函數返回當前日期和時間。通過這些例子,可以明白如何根據需要使用SELECT進行試驗。

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