函数

SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便。

文本处理函数

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

SELECT vend_name, Upper(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name;

日期和时间处理函数

函数 说明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期的差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个时间的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分

匹配订单日期在2005-09-01那天:

SELECT cust_id, order_num FROM orders WHERE Date(order_date) = \'2005-09-01\';

订单日期在2005年9月份的:

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;

数值处理函数

函数 说明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

聚集函数

函数 说明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

AVG() 函数

返回products表中所有产品的平均价格:SELECT AVG(prod_price) AS avg_price FROM products;

也可以用来确定特定列或行的平均值。

返回特定供应商所提供的产品的平均价格:

SELECT AVG(prod_price) AS avg_price FROM products WHERE vend_id = 1003;

AVG()函数只能用于单个列,且忽略列值为NULL的行

COUNT() 函数

返回customers表中客户的总数:

SELETE COUNT(*) AS num_cust FROM customers;

只对具有电子邮件地址的客户计数:

SELECT COUNT(cust_email) AS num_cust FROM customers;

NULL值,如果制定列名,则制定列的值为空的行被COUNT()函数忽略,但如果COUNT()函数中用的是*,则不忽略。

MAX() 函数

返回products表中最贵的物品的价格:

SELECT MAX(prod_price) AS max_price FROM products;

对非数值数据使用MAX(),虽然MAX()一般用来找出最大的数值或时间,但MySQL允许将它用来返回任意列中的最大值,包括返回文本列中的最大值。用于文本数据时,如果数据按相应的列排序,则返回最后一行

MAX() 函数忽略列值为NULL的行

MIN() 函数

正好与MAX()功能相反

SELECT MIN(prod_price) AS min_price FROM product;

SUM() 函数

orderitems表包含订单中实际的物品,每个物品有相应的数量(quantity)。检索所订购物品的总数(所有quantity值之和):

SELECT SUM(quantity) AS items_ordered FROM orderitems WHERE order_num = 20005;

SUM()也可以用来合计计算值。

合计每项物品的item_price*quantity,得出总的订单金额(where 保证了只统计某个物品订单中的物品):

SELECT SUM(item_price*quantity) AS total_price FROM orderitems WHERE order_num = 20005;

聚类不同值

  • 对所有行执行计算,指定ALL参数或者不给参数。(某人是ALL)
  • 只包含不同的值,指定DISTINCT参数。

SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003;

注意:如果指定列名,则DISTINCT只能用于COUNT()。DISTINCT 不能用于COUNT(*),因此,不允许使用COUNT(DISTINCT)。类似的,DISTINCT必须使用列名,不能用于计算或表达式。

组合聚集函数

SELECT COUNT(*) AS num_items, 
	   MIN(prod_price) AS price_min, 
	   MAX(prod_price) AS price_max, 
	   AVG(prod_price) AS price_avg 
FROM products;

版权声明:本文为ZSMblog原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ZSMblog/p/12067805.html