1. 程式人生 > >MySQL必知必會-9MySQL常用函式及數學計算

MySQL必知必會-9MySQL常用函式及數學計算

拼接欄位 使用concat()函式來拼接多個列
  1. SELECT
  2. Concat(
  3. vend_name,
  4. '(',
  5. vend_country,
  6. ')',
  7. vend_address
  8. )
  9. FROM
  10. vendors
  11. ORDER BY
  12. vend_name;
刪除右側多餘的空格來整理資料,使用RTrim()函式
  1. SELECT
  2. Concat(
  3. RTrim(vend_name),
  4. '(',
  5. RTrim(vend_country),
  6. ')'
  7. )
  8. FROM
  9. vendors
  10. ORDER BY
  11. vend_name;
支援去掉右側空格的RTrim() 和 去掉左側空格的LTrim() 以及Trim()去掉左右兩邊的空格 使用別名
別名是一個欄位或值的替換名,別名用AS關鍵字賦予。
  1. SELECT
  2. Concat(
  3. RTrim(vend_name),
  4. '(',
  5. RTrim(vend_country),
  6. ')'
  7. ) AS vend_title
  8. FROM
  9. vendors
  10. ORDER BY
  11. vend_name;
執行算術計算 MySQL提供的算術操作符,加減乘除 + - * /
  1. SELECT
  2. prod_id,
  3. quantity,
  4. item_price,
  5. quantity * item_price AS expanded_price
  6. FROM
  7. orderitems
  8. WHERE
  9. order_num =20005;
如何測試計算
SELECT可以省略FROM子句以便簡單地訪問和處理表達式。例如: SELECT 3 * 2; 將返回6 SELECT Trim('abc');將返回abc,而SELECT Now(),利用Now()函式返回當前日期和時間。 可以通過SELECT進行試驗。 使用資料處理函式 Upper()函式將文字轉換成大寫。
  1. SELECT
  2. vend_name,
  3. Upper(vend_name) AS vend_name_upcase
  4. FROM
  5. vendors
  6. ORDER BY
  7. vend_name;
常用的文字處理函式
 SOUNDEX是一個將任何文字串轉換為描述其語音表示的字母數字模式的演算法。
SOUNDEX考慮了類似發音字元和音節,使得能對串進行發音比較而不是字母比較。 使用Soundex()函式匹配類似的發音 (MySQL官方原話:This function, as currently implemented, is intended to work well with strings that are in the English language only. Strings in other languages may not produce reliable results. This function is not guaranteed to provide consistent results with strings that use multibyte character sets, including utf-8.
We hope to remove these limitations in a future release. See Bug #22638 for more information. 大致意思是:僅對英文有支援,其他語言可能會不可靠,且不能保證對多位元組字符集字串(包括UTF08)提供一致的結果。會在未來取消掉這些限制,詳細看Bug #22638。 經過本人測試,中文的確不可靠,目前來看就是雞肋,以後可能會支援
  1. SELECT
  2. cust_name,
  3. cust_contact
  4. FROM
  5. customers
  6. WHERE
  7. Soundex(CUST_CONTACT)=Soundex('Y Lie');
這個例子中,因為Y.Lee和Y.Lie發音相似,所以它們的SOUNDEX值匹配。 日期處理函式 不管插入或更新表還是用WHERE子句進行過濾,日期必須為格式yyyy-mm-dd,因此2017年2月5日,給出為2017-02-05,雖然其他格式也可以,但這是首選的格式。
  1. SELECT
  2. cust_id,
  3. order_num
  4. FROM
  5. orders
  6. WHERE
  7. order_date ='2005-09-01';
但更為可靠的方法使用DATE函式,以免日後修改order_date為DATETIME型別(日期和時間)
  1. SELECT
  2. cust_id,
  3. order_num
  4. FROM
  5. orders
  6. WHERE
  7. DATE(order_date)='2005-09-01';
檢索2005年9月的所有訂單
  1. SELECT
  2. cust_id,
  3. order_num
  4. FROM
  5. orders
  6. WHERE
  7. YEAR (order_date)=2005
  8. AND MONTH (order_date)=9;
常用日期和時間處理函式   數值處理函式   彙總資料 聚集函式 MySQL提供了5個聚集函式 AVG()  返回某列的平均值 COUNT()  返回某列的行數 MAX()   返回某列的最大值 MIN()  返回某列的最小值 SUM()  返回某列值值之和 AVG()只能確定數列的平均值,而且列名必須作為函式引數給出,但 AVG()函式忽略值為NULL的行
  1. SELECT
  2. AVG(prod_price) AS avg_price
  3. FROM
  4. products
  5. WHERE
  6. vend_id =1003;
COUNT()函式 COUNT()函式有兩種使用方式。 使用COUNT(*)對錶中的行數目進行計數,不管表列中包含的是空值(NULL)還是非空值。 使用COUNT(COLUMN)對特定列中具有值得行進行計數,忽略NULL值。
  1. SELECT
  2. COUNT(*) AS num_cust
  3. FROM
  4. customers;
  1. SELECT
  2. COUNT(cust_email) AS num_cust
  3. FROM
  4. customers;
這兩者還是有區別的,因為部分cust_email為NULL,所以兩者的總數不一樣。 利用標準算術符,所有聚集函式都可以用來執行多個列上的計算。
  1. SELECT
  2. COUNT(*),
  3. AVG(quantity),
  4. MAX(item_price),
  5. MIN(item_price),
  6. SUM(quantity * item_price)
  7. FROM
  8. orderitems;
聚集不同值 對所有的行執行計算,指定ALL引數或不給引數(因為ALL是預設行為) 只包含不同的值,指定DISTINCT引數 ALL引數不需要指定,因為它是預設行為,如果不指定DISTINCT,則假定為ALL 使用AVG()函式返回特定供應商提供的產品的平均價格。
  1. SELECT
  2. AVG(DISTINCT prod_price) AS avg_price
  3. FROM
  4. products
  5. WHERE
  6. vend_id =1003;
DISTINCT不能用於COUNT(*),因此不允許使用COUNT(DISTINCT) 聚集函式是高效設計的,如果可以最好使用,返回結果一般比在自己的客戶機應用程式中要快得多。