一、函数介绍
SQL和大多数程序语言一样支持用函数来处理数据。不同的DBMS中有SQL通用的数据处理函数,当然也有自己独有的数据处理函数,所以函数在DBMS上的可移植性没有SQL语言的强。
二、使用函数
大多数的DBMS都支持以下函数:
- 用于处理文本串(删除,填充,转换值大小写)的文本函数
- 用于数据数值上的算术运算(绝对值,代数运算)
- 处理日期和时间值,并从中提取特殊成分(返回两日期时间差,检查日期有效性等)
- 返回DBMS正在使用的特殊信息(用户登录,版本信息)–系统函数
三、具体实现
1、文本处理函数
常用的文本处理函数:
函数 | 说明 |
---|---|
Left(str,length) | 返回str串左边起length个字符 |
Right(str,length) | 返回str串右边起length个字符 |
Length( ) | 返回串的长度 |
Locate(str1,str2 ) | 找出串str1在串str2中第一次出现的位置 |
Lower( ) | 将串转换为小写 |
Upper() | 将串转换为大写 |
LTrim() | 去掉左边的空格 |
RTrim() | 去掉右边的空格 |
Soundex | 返回串的SOUNDEX值 |
SubString(str,index) | 返回字符串str从index开始的子串 |
注:
Soundex是一种语音算法,利用英文字的读音计算近似值,值由四个字符构成,第一个字符为英文字母,后三个为数字。在拼音文字中有时会有会念但不能拼出正确字的情形,可用Soundex做类似模糊匹配的效果。例如Knuth和Kant二个字符串,它们的Soundex值都是“K530”。其在电脑大师高德纳名著《计算机程序设计艺术》都有详细的介绍。
2、日期和时间处理函数
函数 | 说明 |
---|---|
Adddate(date,INTERVAL expr unit) | 给data加上expr间隔的unit单位时间 |
AddTime() | 增加一个时间(时,分等) |
CurDate() | 返回当前日期 |
CurTime() | 返回当前时间 |
Date() | 返回当前日期时间的日期部分 |
DateDiff() | 计算两个日期之差 |
Date_Add() | 灵活的时间运算函数,和addTime()差不多 |
Date_Format() | 格式化日期时间串 |
Day() | 返回天 |
Hour() | 返回小时 |
Minute() | 返回分钟 |
Second() | 返回秒数 |
DayOfWeek() | 返回星期几 |
Month() | 返回月份 |
Now() | 返回当前日期和时间 |
Time() | 返回当前时间 |
Year() | 返回年数 |
实例:
AddDate(date,INTERVAL expr unit)
- INTERVAL 指定单位是不可省略(增加单位是打印可以省略)
- expr :增加数量
- unit :增加单位
mysql> select hiredate ,adddate(hiredate,interval 1 day) from emp;
+------------+----------------------------------+
| hiredate | adddate(hiredate,interval 1 day) |
+------------+----------------------------------+
| 1980-12-17 | 1980-12-18 |
| 1981-02-20 | 1981-02-21 |
| 1981-02-22 | 1981-02-23 |
| 1981-04-02 | 1981-04-03 |
| 1981-09-28 | 1981-09-29 |
| 1981-05-01 | 1981-05-02 |
| 1981-06-09 | 1981-06-10 |
| 1987-04-19 | 1987-04-20 |
| 1981-11-17 | 1981-11-18 |
| 1981-09-08 | 1981-09-09 |
| 1987-05-23 | 1987-05-24 |
| 1981-12-03 | 1981-12-04 |
| 1981-12-03 | 1981-12-04 |
| 1982-01-23 | 1982-01-24 |
+------------+----------------------------------+
14 rows in set (0.00 sec)
// 实例:
/**增加一天*/
select adddate(hiredate,interval 1 hour),hiredate from emp;
/**增加一分*/
select adddate(hiredate,interval 1 minute),hiredate from emp;
/**增加一秒*/
select adddate(hiredate,interval 1 second),hiredate from emp;
/**增加一天,interval 和 nuit可以省略*/
select adddate(hiredate,1),hiredate from emp;
/**增加一天一时*/
select adddate(hiredate,interval '1 1' DAY_HOUR),hiredate from emp;
/**增加一时一分*/
select adddate(hiredate,interval '1:1' HOUR_MINUTE),hiredate from emp;
注意:Mysql中在用where过滤时间数据时候,会自动精确到时,分和秒,。所以在进行时间比较的时候要相当注意两者比较的部分,
只比较日期的时候应该把时间部分略去
筛选时间区间
方案一:between and 关键字
mysql> select hiredate from emp where hiredate between '1981-01-01' and '1982-12-12';
必须使用单引号
方案二:时间过滤
select hiredate from emp where year(hiredate)=1981 and (month(hiredate) in (2,4));
3、数值处理函数
在主要的DBMS中,数值处理函数是最统一和最一致的函数,主要用于代数,三角或集合运算。
函数 | 说明 |
---|---|
Abs() | 返回一个数的绝对值 |
Cos() | 返回一个角的余弦值 |
Exp() | 返回一个数的指数值 |
Mod() | 取余 |
PI() | 返回圆周率 |
Rand() | 返回一个随机数 |
Sin() | 返回一个角的正弦值 |
Sqrt() | 返回一个数的平方根 |
Tan() | 返回一个角的正切值 |