创建计算字段

1
2
3
4
5
6
7
8
9
10
11
-- 拼接字段 Concat()
SELECT Concat(vend_name, ' (', vend_country, ')') FROM vendors ORDER BY vend_name;

-- Trim() 去除空格
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') FROM vendors ORDER BY vend_name;

-- 使用别名 AS
SELECT Concat(RTrim(vend_name), ' (', RTrim(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;

-- 执行算术计算
SELECT prod_i, quantity, item_price, quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005;

Tips

  • 多数DBMS 使用 + 或 || 来实现拼接,MySQL 则使用 Concat() 函数来实现,转换SQL语句时需要小心。
  • 直接使用 SELECT 语句即可测试计算

常用文本处理函数

  • Left() 返回串左边的字符
  • Length() 返回串的长度
  • Locate() 找出串的一个子串
  • Lower() 将串转换为小写
  • LTrim() 去除串左边的空格
  • Right() 返回串右边的字符
  • RTrim() 去掉串邮编的空格
  • Soundex() 返回串的SOUNDEX值
  • SubString() 返回子串的字符
  • Upper() 将串转换为大写

日期和时间处理函数

  • AddDate() 增加一个日期(天、周等)
  • AddTime() 增加一个时间(时、分等)
  • CurDate() 返回当前日期
  • CurTime() 返回当前时间
  • Date()
  • DateDiff()
  • Date_Add()
  • Date_Format()
  • Day()
  • DayOfWeek()
  • Hour()
  • Minute()
  • Month()
  • Now()
  • Second()
  • Time()
  • Year()
1
2
3
SELECT cust_id, order_num FROM orders WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';

SELECT cust_id, order_num FROM orders WHERE Year(order_date) = 2005 AND Month(order_date) = 9;

Tips

  • 应该总是使用4位数字的年份,这样 MySQL 不必做出任何假定

数值处理函数

  • Abs()
  • Cos()
  • Exp()
  • Mod()
  • Pi()
  • Rand()
  • Sin()
  • Sqrt()
  • Tan()

汇总数据

  • AVG()
  • COUNT()
  • MAX()
  • MIN()
  • SUM()
  • DISTINCT

Tips

  • COUNT(*) 对表中行的数目进行计数,不管表列中包含的是否为 NULL
  • COUNT(column) 对特定咧中具体值的行进行计数,忽略 NULL
  • DISTINCT 必须指定列名

参考书籍: 《MySQL必知必会》