大纲
1、函数
2、文本处理函数
3、数值计算函数
4、日期处理函数
5、聚集函数
1、函数
函数好用,但是不通用:
函数大致可以分为以下类型:
用于处理文本串
用于处理日期和时间
用于数值计算
返回DBMS系统信息
如何知道函数怎么使用?
1、查看官方文档:http://dev.mysql.com/doc/refman/5.1/zh/index.html
2、mysql> help functions;
然后,根据自己的需要,查看具体的函数类别。
MySQL中使用函数时,函数名和左括号之间不能有空格。ERROR 1305 (42000)
Bug #61795 已经修复, Version> 5.1.41-3
2、文本处理函数
文本处理函数可以很方便的帮助我们进行一些处理。比如大小写转换(UPPER, LOWER),去除空格(TRIM, RTRIM, LTRIM),以及取出串的一部分或者填充等等。
SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。
mysql> SELECT cust_name FROM customers WHERE SOUNDEX(cust_name) = SOUNDEX(‘Y. lie‘);
在前面的学习过程,我们提到:默认情况下,MySQL在进行文本比较的时候,是不区分大小写的。这取决于MySQL的设置。我们如何避免这种情况呢? 在比较的时候,同时转为大写或小写即可,保持统一。
WHERE UPPER(name) = UPPER(‘skypeGNU‘);
3、数值计算函数
数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角函数或几何运算,因此没有串或日期时间处理函数的使用那么频繁。
4、日期处理函数(日期也存储为字符串格式)
日期和时间采用相应的数据类型和特殊的格式存储,以便能快速和有效的排序或过滤,并且节省物理存储空间。日期和时间函数在MySQL具有很重要的作用。
首先需要注意的是MySQL使用的日期格式。无论你什么时候指定一个日期。不管是插入或更新表值还是用WHERE子句进行过滤,日期必须为格式yyyy-mm-dd。虽然其他的日期格式可能也行,但这是首选的日期格式,因为它排除了多义性。应该总是使用4位数字的年份,他们更可靠,因为MySQL不必做出任何假定。
SELECT cust_id, order_num FROM orders WHERE order_date = ‘2005-09-01‘;
其实,在内部日期和时间也是存储为字符串。所以可以按照字符串比较的方式进行。
但是,使用WHERE order_date = ‘2005-09-01‘;可靠吗?datetime这种类型存储日期和时间值,但是我们仅给出了日期值。怎么办?
解决办法是指示MySQL仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。
SELECT cust_id, order_num FROM orders WHERE DATE(order_date) = ‘2005-09-01‘; # DATE()
最佳实践:如果要的是日期,请使用DATE()。如果只想要时间,应该使用TIME()函数。
如果想检索出2005年9月,下的所有订单,怎么办?
SELECT cust_id, order_num FROM orders WHERE DATE(order_date) BETWEEN ‘2005-09-01‘ AND ‘2005-09-30‘;
另外还有一种方法(一种不需要记住每个月中有多少天或不需要操心闰2月的办法)
SELECT cust_id, order_num FROM orders WHERE YEAR(order_date) = 2005 AND MONTH(order_date) = 9;
强烈推荐这种方法。
5、聚集函数
确定表中行数
获得表中行组的和
找出表列的最大值、最小值、平均值
聚集函数(aggregate function) 运行在多个行组上,计算和返回单个值得函数。
对于NULL值得行,除了COUNT(*),其他聚集函数都是忽略NULL值的行。
以上5个聚集函数都可以如下使用:
对所有的行执行计算,指定ALL参数或不给参数
如果想只包含不同的值,指定DISTINCT参数。
ALL为默认。如果不指定DISTINCT, 则假定为ALL。
mysql> SELECT AVG(DISTINCT prod_price) avg_price
如果指定列名,则DISTINCT只能用于COUNT(column)。DISTINCT不能用于COUNT(*),否则错误。
类似的,DISTINCT必须使用列名,不能用于计算或表达式。
本文出自 “Share your knowledge” 博客,请务必保留此出处http://skypegnu1.blog.51cto.com/8991766/1435429
原文地址:http://skypegnu1.blog.51cto.com/8991766/1435429