8.1 函数
函数带来的问题
与几乎所有 DBMS 都等同地支持 SQL 语句(如 SELECT)不同,每一个DBMS 都有特定的函数。为了说明可能存在的问题,表 8-1列出了 3 个常用的函数及其在各个 DBMS 中的语法:
可以看到,与 SQL 语句不一样,SQL 函数不是可移植的。这意味着为特定 SQL 实现编写的代码在其他实现中可能不正常。
可移植(portable)
所编写的代码可以在多个系统上运行。
为了代码的可移植,许多 SQL 程序员不赞成使用特定于实现的功能。虽然这样做很有好处,但有的时候并不利于应用程序的性能。如果不使用这些函数,编写某些应用程序代码会很艰难。必须利用其他方法来实现DBMS 可以非常有效完成的工作。
提示:是否应该使用函数?
现在,你面临是否应该使用函数的选择。决定权在你,使用或是不使用也没有对错之分。如果你决定使用函数,应该保证做好代码注释,以便以后你(或其他人)能确切地知道所编写的 SQL 代码的含义。
8.2 使用函数
大多数 SQL 实现支持以下类型的函数。
用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。
用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数。
用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期有效性)的日期和时间函数。
返回 DBMS 正使用的特殊信息(如返回用户登录信息)的系统函数。
8.2.1 文本处理函数
我们已经看过一个文本处理函数的例子,其中使用 RTRIM()函数来去除列值右边的空格。下面是另一个例子,这次使用的是 UPPER()函数:
SELECT vend_name, UPPER(vend_name) AS vend_name_upcase
FROM Vendors
ORDER BY vend_name;