摘要:計算字段是在檢索過程中建立的虛擬字段,他們并不實際存在于數據庫中。計算字段和程序處理之間關系數據庫這種臨時處理數據,格式化輸出的結果,都可以使用編程語言來實現。之間多個值使用逗號分割。過濾字段上面使用來組合字段。
本文主要介紹Mysql中計算字段的使用方法
我博客文章地址:http://weiya.me/item/60.html
簡介在創建數據庫表的時候,往往為了數據庫的各種性能,我們需要將字段拆分或者按照特定的類型存儲。而在讀取數據庫的時候,檢索出來的數據往往不是我們直接需要使用的數據。舉幾個例子:
我們在存儲省市區和街道信息時候會將他們多帶帶分別存儲在不同的列,而我們讀取時候需要完整地址信息
訂單表中,我們存儲單價和購買數量。但是,讀取信息往往需要用戶所有付款金額
我們存儲進數據庫的所有單詞都是大小寫混合,而檢索出來需要全部小寫
這種情況下,就需要使用數據庫的計算字段功能了。簡單來說,就是在檢索數據的時候對數據進行一定的操作。比如,格式化數據、拼接數據等操作。
計算字段是在SELECT檢索過程中建立的虛擬字段,他們并不實際存在于數據庫中。
字段通常開發中,我們將數據庫檢索出來的列稱為字段,他們在大部分情況下是一個意思。但是在使用計算字段時候,字段包含了虛擬出來的字段和數據庫實際查詢到的列。
計算字段和程序處理之間關系數據庫這種臨時處理數據,格式化輸出的結果,都可以使用編程語言來實現。但是,如果可以,請盡量使用Mysql來操作,畢竟,數據庫的設計天生就是為了這些功能。簡而言之,就是數據庫處理比程序語言處理快,效率高。
演示操作 Concat拼接字段下面先說說最常用的字段拼接。我們準備了一張用戶姓名表
可以看到其中的用戶姓氏和名是分開存儲的,現在我們進行常規檢索
SELECT * FROM user_name;
得到的結果也是用戶的姓氏和名是分開的。
但是現在我們需要輸出完整用戶名字。這個時候,我們可以使用計算字段函數concat來使得這兩個字段拼接起來,完整顯示。
SELECT CONCAT(first_name,last_name) FROM user_name;
結果如我們所愿。concat之間多個值使用逗號分割。同理,我們還可以在concat函數中加入其他內容,比如短線。
SELECT CONCAT(first_name,"-",last_name) FROM user_name;
這樣就可以隨心所欲的組合我們需要顯示的數據
提醒:Mysql不同于其他數據庫使用+號或者||來實現字段的拼接,Mysql使用函數concat來進行字段拼接。如果從別的數據庫轉換到Mysql時候需要格外的注意。
trim過濾字段上面使用concat來組合字段。假設,用戶姓氏和名字段中有個字段前后包含了空格,而我并不想要該空格,應該如何解決?
辦法很簡單,在之前我們文章中曾經提到過使用Rtrim來去除字段右側的空格。這里也同理可以使用
SELECT CONCAT(RTRIM(first_name),"-",last_name) FROM user_name;
這樣,姓氏的右側如果有空格,則會被過濾掉。同理,使用LTRIM可以過濾左側的空格,如果使用TRIM則可以過濾兩端的空格,更加省事。
使用別名別名,如果用在人身上那么就相當于人的小名。比如我們國家領導人也有人叫他習大大。數據庫中也是一樣可以給查詢的字段建立一個小名。
別名大概有兩種用途,第一個是給沒有名字的字段新建一個名字,或者給已經有名字的字段重新取一個名字。
新建名稱看下上面的一個例子結果:
這個是剛剛使用concat查詢數據庫得到的結果。我們仔細看下他最上面的一行名字:CONCAT(RTRIM(first_name),"-",last_name)。或者說這根本就不是一個名字,只是Mysql將那個表達式用到這里標識了一下。
在Mysql中直接看沒什么大問題,但是如果到了程序語言中,根本無法引用該字段的內容。所以我們得給這個字段重新取一個名字。
Mysql中取別名需要一個關鍵字AS:
SELECT CONCAT(RTRIM(first_name),"-",last_name) AS `nickname` FROM user_name;
現在再來看,名字是不是變得非常簡潔了。該字段的名字nickname就是我們剛剛給取的位于AS后面的名字。
當然如果你寫的特別熟練了之后,你也可以省略該AS關鍵字,直接這么寫。
SELECT CONCAT(RTRIM(first_name),"-",last_name) `nickname` FROM user_name;
結果也是一樣。
取一個別名上面我們說的是給一個沒有名字的字段取一個名字,當然Mysql還可以給已經有名字的字段重新取一個名字。當然這個也不是吃飽了撐的。
當數據庫字段名字特別長時候,可以取一個簡短的名字來縮短語句長度和書寫復雜度
后面章節會講到,當關聯多個表查詢的時候,如果遇到兩張表具有相同字段時候,我們需要給每個字段前面加上一個數據庫別名來區分字段
當數據庫原本列名中包含不符合規范的字符,比如空格。檢索數據時候,就需要重新命名
或者當原本數據庫名不足以表達當前字段含義時候,就需要重新取名以防混淆
別名有時候也被成為導出列,意思是一樣的
我們舉個例子:
假設一個數據庫名叫yy_user_base_info。假設我們需要查詢表中用戶名稱和年齡:
SELECT yy_user_base_info.`name`,yy_user_base_info.`age` FROM `yy_user_base_info`;
這樣寫起來很是繁瑣,所以我們可以給數據庫取個別名,用來簡化查詢語句。
SELECT u.`name`,u.`age` FROM `yy_user_base_info` AS u;
這樣是不是就簡化了許多?
算術運算前面應用場景中我們還提到一個例子。就是訂單表中我們保存了單價和購買數量,而我們需要直接輸出訂單總價。這個時候就需要我們的算術計算功能上線了。
我們先準備一個數據表:
SELECT pro_id,quantity,item_price,quantity*item_price AS total_amount FROM orders;
可以看到,原本只有3列的數據庫,如今變為了4列,其中最后一個字段total_amount只是一個虛擬的字段,是我們使用item_price和quantity相乘得來的。這樣我們就得到了所有我們需要的字段。
在編程語言中,你使用total_amount就和其他幾個實際存在的字段一樣引用。
Mysql中不僅僅可以使用乘號,還可以使用其他運算符,包含加減乘除所有運算符。
Mysql顯示計算結果Mysql其實和編程語言一樣,也是可以做計算,直接處理函數,并且輸出。
比如:
SELECT 3*2;
直接返回了計算結果6
再比如:
SELECT NOW();
直接返回了當前時間。
所以在Mysql中,如果直接使用SELECT后面跟上需要計算的內容,則可以直接返回的值。
星空幻穎,嚴穎
個人主頁:segmentfault
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22332.html
摘要:編程語言中經常使用函數來處理一些字符串,數字或者其他內容。所以如果需要移植要慎重使用函數。該函數有兩個參數,第一個參數為字符串,第二個參數為字符串長度。還有另外兩個相似函數去除字符串左側空格去除字符串右側空格字符串截取函數。 編程語言中經常使用函數來處理一些字符串,數字或者其他內容。MySQL也是一樣,可以使用函數來快速達到一系列的目的。 在上一篇文章《計算字段的使用》中,我們提前使用...
閱讀 2862·2021-07-30 15:30
閱讀 559·2019-08-30 15:55
閱讀 1625·2019-08-26 17:04
閱讀 637·2019-08-26 11:36
閱讀 2070·2019-08-26 10:58
閱讀 3553·2019-08-23 14:34
閱讀 1561·2019-08-22 18:48
閱讀 2529·2019-08-21 17:51