mysql数据处理函数教程
函数
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;