学习目标:
- 什么是函数
- mysql支持何种函数
- 如何使用这些函数
一.函数
SQL支持利用函数来处理数据。 函数一般是在数据上执行的,它给数据的转换和处理提供了方便。 能运行在多个系统上的代码称为可移植的( portable)。 而函数的可移植性却不强。几乎每种主要的DBMS的实现都支持其他实现不支持的函数,而且 有时差异还很大。 如果你决定使用函数,应该保证做好代码注释,以便以后你(或其他人)能确切地知道所编写SQL代码的含义。
二.使用函数
大多数SQL实现支持以下类型的函数。 用于处理文本串(如删除或填充值,转换值为大写或小写)的文 本函数。 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。 用于处理日期和时间值并从这些值中提取特定成分(例如,返回两个日期之差,检查日期有效性等)的日期和时间函数。 返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数
1.文本处理函数
a.将prod_name全部转为大写(upper)
select prod_name,upper(prod_name) as upper_prod_name ,prod_id from products
order by prod_id; 格式:select 列名1,upper(列名2),列名3 from 表名 order by 列名3;upper()将文本转换为大写
b.SOUNDEX是根据发音,找出相似文本
ustomers表中有一个顾客其联系名为Y.Lee。select cust_name,cust_contact from customers
where cust_contact = 'Y lie';
但如果这是输入错误,此联系名实际应该是Y.Lie,怎么办?使用soundex函数: select cust_name,cust_contact from customers where soundex(cust_contact) = soundex('Y lie');
WHERE子句使用Soundex()函数来转换cust_contact列值和搜索串为它们的SOUNDEX值。因为Y.Lee和Y.Lie发音相似,所以它们的SOUNDEX值匹配 。
2.日期和时间处理函数
日期和时间采用相应的数据类型和特殊的格式存储,以便能快速和有效地排序或过滤,并且节省物理存储空间。日期和时间函数总是被用来读取、统计和处理这些值。
首先需要注意的是MySQL使用的日期格式。无论你什么时候指定一个日期,不管是插入或更新表值还是用WHERE子句进行过滤,日期必须为格式yyyy-mm-dd,这是首选的日期格式。因此, 2005年9月1日,给出为2005-09-01。虽然其他的日期格式可能也行,但这是首选的日期格式,因为它排除了多义性(如,04/05/06是2006年5月4日或2006年4月5日或2004年5月6日或……)。
基本日期:order_date的数据类型为datetime。这种类型存储日期及时间值。
a.where order_date = '2005-09-01'
select cust_id,order_num from orderswhere order_date = '2005-09-01';
MySQL仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。
为此,必须使用Date()函数。 Date(order_date)指示MySQL仅提取列的日期部分,更可靠的
b.where date(order_date) = '2005-09-01';(date函数)
select cust_id,order_num from orderswhere date(order_date) = '2005-09-01';格式:select 列名1,列名2 from 表名 where date(列名3) = '2005-09-01';
这样,如果由于某种原因表中以后有日期和时间值,你的SQL代码也不用改变。当然,也存在一个Time()函数,在你只想要时间时应该使用它。Date()和Time()都是在MySQL 4.1.1中第一次引入官网:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html个人:https://www.cnblogs.com/poloyy/p/12890763.html?spm=a2c6h.12873639.article-detail.6.7a9a7aceQlWX4D
c.time:返回指定日期时间的时间部分
SELECT TIME('1987-01-01 16:00:00');SELECT TIME(CURTIME());SELECT TIME(CURRENT_TIMESTAMP);
d.检索出2005年9月下的所有订单,怎么办?
法1:select cust_id,order_num from orderswhere date(order_date) between '2005-09-01' and '2005-09-30';
e.检索出order_date为2005年9月的所有行:
法2:(一种不需要记住每个月中有多少天或不需要操心闰年2月的办法)select cust_id,order_num from orderswhere year(order_date) = 2005 and month(order_date) = 9;
Year()是一个从日期(或日期时间)中返回年份的函数。Month()从日期中返回月份。
3.数值处理函数
数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角或几何运算。因此没有串或日期—时间处理函数的使用那么频繁。
a.ABS(X) : 返回X的绝对值。
select abs(-9),abs(-20)
b.ROUND(X,Y) :返回参数X的四舍五入的有Y位小数的值。
SELECT ROUND(3.1415926,3)
SELECT prod_price,ROUND(prod_price,1) from products;
c.TRUNCATE(X,Y) :返回参数X截断为Y位小数的结果。
SELECT TRUNCATE(3.1415926,4)
SELECT prod_price,TRUNCATE(prod_price,1) from products;
d.RAND() : 返回 0~1内的随机值。
SELECT RAND()
三.总结
学习了:
- 文本处理函数(upper,soundex)
- 日期和时间处理函数(date,time,year,month)
- 数值处理函数(abs,rand,round,truncate)
多思考,多总结,多输出,一键四连~
但行好事,莫问前程,我们下篇见~
10.《创建计算字段》:https://blog.51cto.com/SuperBigData/5473849
9.《用正则表达式进行搜索》:https://blog.51cto.com/SuperBigData/5466582
8.《用通配符进行过滤》:https://blog.51cto.com/SuperBigData/5458893
7.《数据过滤》:https://blog.51cto.com/SuperBigData/5457563
6.《过滤数据》:https://blog.51cto.com/SuperBigData/5456902
5.《排序检索数据》:https://blog.51cto.com/SuperBigData/5451534
4.《检索数据》:https://blog.51cto.com/SuperBigData/5449032
3.《使用MySQL》:https://blog.51cto.com/SuperBigData/5437954
2.《MySQL简介》:https://blog.51cto.com/SuperBigData/5436719
1.《了解MYSQL》:https://blog.51cto.com/SuperBigData/5434475