为了方便用户的使用,SQL 定义了很多函数,可以在 WHERE 子句中使用。当然这些函数在 SQL 语句的其他地方也可以使用,不过这些函数在 WHERE 子句中更加有用。
(1) 删除多余空格
SQL 中提供了 TRIM( )函数来方便的删除字符串的串前串后可能存在的空格。例如,在输入工作人员记录时,录入人员不小心在一些工作人员名字之后输入了空格,为了消除这些空格的可能影响,在查找时就可以使用 TRIM( )函数,如查找名为“王静”的工作人员记录,可以这样进行查询:
SELECT name, sex, id, salary
FROM Employee
WHERE TRIM(name) = ’王静’
TRIM( )函数也经常与别的函数特别是字符串函数一起使用,以使其它函数的返回结果不会有多余的空格。
(2) 字符串函数
SQL 中为字符串提供了很多有用的函数,如 LOWER(str)函数用于将字符串 str中所有字符都转化为小写字符。这样就可以解决比较时的大小写问题。如增加了一个名为“Mike”的外籍工作人员之后,查找名为“Mike”的工作人员记录,而不清楚系统中将如何存储,可以这样进行查询:
SELECT name
FROM Employee
WHERE LOWER(name) = ’mike’
Results
name
—————
Mike
[1row]
从显示结果可以知道,WHERE 子句中的 LOWER(name)函数的使用并不会改变name 列的值,因此显示结果中工作人员的名字仍为“Mike”。 又如,前面介绍了知道工作人员的名字是 2 个字长,但不知道其中任何一个字,可以这样使用通配符“_”进行匹配:
SELECT name, sex, id, salary
FROM Employee
WHERE name LIKE ’__’
SQL 中提供了计算字符串长度的函数——LENGTH(str)。就可以使用该函数查询名字长度为 2 个字长的工作人员的记录:
SELECT name, sex, id, salary
FROM Employee
WHERE LENGTH(name) = 2
Results
name sex id salary
————— ——— —— ————
李明 男 1002 5000.00
刘燕 女 2002 3000.00
张宇 男 3001 5000.00
魏箐 女 3003 4000.00
王静 女 3004 3000.00
张峰 男 4001 7000.00
魏成 男 6001 5000.00
[7rows]
有关 SQL 中提供的字符串函数及其用途,将在第 10 章进行详细介绍。
(3) 类型转换函数
SQL 中提供了三个转换函数:CONVERT( )、TO_CHAR( )和 TO_NUMBER( )函数。
CONVERT( )函数是通用的转换函数,可以进行多种数据类型间的转换。
CONVERT( )使用三个参数:目标数据类型、被转换的表达式和数据的输出类型(该数据要转换成字符串类型的时候使用):
CONVERT(data_type , expression [,style])
TO_CHAR( )函数可以将其它类型的数据转换成字符串。如,将时间类型转换为字符串类型数据。TO_NUMBER( )函数则用于将其它类型的数据转换为数字类型。如,创建表时将 Paccepter 表中的 pnumber 列定义为字符串类型,使用中需要将其作为数字时,就可以使用 TO_NUMBER( )函数很好的将存储为字符串的数字方便的转换成数字类型数据。有关这三个函数的使用,将在第 10 章进行详细介绍。
在不同的数据库系统中可能提供了其它的转换函数, 如Oracle中提供了TO_DATE( )函数以将字符串转换成日期。 这样,在需要时您就可以使用转换函数,使得进行比较或使用表达式时不会产生类型不匹配的问题。
(4) 聚集函数
SQL 中提供了很多聚集函数可以方便的进行最大值、最小值、平均值等的计算。在WHERE 子句中也可以使用这些函数,如查找所有大于平均值的记录。有关聚集函数的使用,将在下一章进行详细的介绍。
(5) 函数的嵌套
SQL 支持函数的嵌套使用。例如,使用先使用 SUBSTR( )函数从一个字符串中取出一个字串,再使用 TRIM( )函数去除可能的前后空格。可以这样使用:
TRIM(SUBSTR(’NO.9 Shengli Road ’,21))
函数的执行结果为:
NO.9 Shengli Road
函数嵌套时,按照从里到外的顺序执行。上例中先执行 SUBSTR( )函数,随后才执行 TRIM( )函数。