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)

聚集函数是高效设计的,如果可以最好使用,返回结果一般比在自己的客户机应用程序中要快得多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值