SQL

SQL 知识量:22 - 44 - 129

8.2 使用函数><

SQL支持的函数类型- 8.2.1 -

大多数DBMS支持以下类型的函数:

  • 用于处理文本字符串的文本函数。例如:删除或填充值,转换值为大写或小写等。

  • 用于在数值数据上进行算术计算的数值函数。例如:返回绝对值,进行代数运算等。

  • 用于处理日期和时间值并从这些值中提取特定成分的日期和时间函数。例如:返回两个日期的差,检查日期有效性等。

  • 返回DBMS使用的特殊信息的系统函数。例如返回用户登录信息等。

函数不仅可以作为select语句的(查询)列表部分,还可以成为select语句的其他部分,例如:在where子句中使用等。

文本处理函数- 8.2.2 -

文本处理函数用于处理字符串等文本数据。

例如:将所有学生姓名转换为大写并显示出来。

select upper(name) from student;

结果:

+-------------+
| upper(name) |
+-------------+
| SUSAN       |
| JAME        |
| BOB         |
| ROBOT       |
| JEN         |
| TONEY       |
| JACK        |
| ALICE       |
| BONNIE      |
| ELLA        |
+-------------+

以上SQL语句中,通过使用upper()函数,将查询的学生姓名全部转换成了大写形式。

常用的文本处理函数如下所示:

函数s说明
left()(或使用子字符串函数)返回字符串左边的字符
length()(也使用datalength()或len())返回字符串的长度
lower()(Access使用lcase())将字符串转换为小写
ltrim()去掉字符串左边的空格
right()(或使用子字符串函数)返回字符串右边的字符
rtrim()去掉字符串右边的空格
soundex()返回字符串的soundex值
upper()(Access使用ucase())将字符串转换为大写

因为函数的差异性,以上函数的使用应当在具体的DBMS手册指导下进行。

soundex()函数的功能是将任何文本串转换为描述其语音表示的字母数字模式,soundex()考虑了类似的发音字符和音节,因此,可以对字符串进行发音比较。

例如:查找姓名发音与“Jem”相似的学生信息。

select * from student where soundex(name)=soundex('Jem');

结果:

+----+------+-----+--------+
| id | name | age | sex    |
+----+------+-----+--------+
|  2 | Jame |  12 | male   |
|  5 | Jen  |  11 | female |
+----+------+-----+--------+

Jame和Jen与Jem的发音相似,因此被查询出来了。

注意:对于soundex(),多数DBMS是支持的,但是Microsoft Access和PostgreSQL是不支持的。

日期和时间处理函数- 8.2.3 -

日期和时间采用相应的数据类型存储在数据表中,但是每种DBMS都有自己的特殊形式。日期和时间处理函数总是用来读取、统计和处理这些特殊数据。

例如:查询2013年生产的产品信息。

select * from product where year(produce_date)=2013;

结果:

+----+--------------+--------------+
| id | product_name | produce_date |
+----+--------------+--------------+
|  1 | tea          | 2013-05-08   |
|  5 | phone        | 2013-05-01   |
+----+--------------+--------------+

以上是使用MySQL进行查询的语句。

如果使用SQL Server应当修改为:

select * from product where datepart(yy,produce_date)=2013;

如果使用Access应当修改为:

select * from product where datepart('yyyy',produce_date)=2013;

如果使用PostgreSQL应当修改为:

select * from product where date_part('year',produce_date)=2013;

如果使用Oracle应当修改为:

select * from product where to_number(to_char(produce_date,'YYYY'))=2013;

其中,to_char()用于提取日期的成分,to_number()用来将提取的成分转换为数值。

其他功能的日期和时间处理函数还有很多,但是如上所示,在使用时一定要参阅相应DBMS的文档,不然很容易出错。

数值处理函数- 8.2.4 -

数值处理函数只是处理数值数据,包括代数、三角或几何运算等。在主要的DBMS中,数值函数是最一致、最统一的函数,这倒是个好消息。

常用的数值处理函数如下:

函数说明
abs()返回一个数的绝对值
cos()返回一个角度的余弦
exp()返回一个数的指数值
pi()返回圆周率
sin()返回一个角度的正弦
sqrt()返回一个数的平方根
tan()返回一个角度的正切

关于具体DBMS所支持的算术处理函数,还是要参阅相应的文档。