本文共 2164 字,大约阅读时间需要 7 分钟。
有很多时候,可能需要对条件进行一些特殊的处理。例如,存储的字符串可能在串前或串后包含空格,这样进行 时,多余的空格可能导致比较的错误,如果能去掉这些空格就不会产生多余的错误。也可能系统规定,存储时对字符串都以大写形式进行存储,这样也为比较带来了麻烦,因为大小写字符不一定相同,如果能统一的进行大写或小写比较也可以避免这样的错误。 为了方便用户的使用,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( )函数。 转载于:https://my.oschina.net/javaEasy/blog/70773