第8课 使用函数处理数据


第8课 使用函数处理数据 8.1 函数 每一个DBMS都有特定的函数。事实上,只有少数几个函数被所有主要的 DBMS 等同地支持。虽然所有类型的函数一般都可以在每个 DBMS 中使用,但 各个函数的名称和语法可能极其不同。为了说明可能存在的问题,表 8-1 列出了 3 个常用的函数及其在各个 DBMS 中的语法:   可移植(portable)   8.2 使用函数 8.2.1 文本处理函数 SOUNDEX 是一个将任何文 本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX 考虑了 类似的发音字符和音节,使得能对字符串进行发音比较而不是字母比 较。虽然 SOUNDEX 不是 SQL 概念,但多数 DBMS 都提供对 SOUNDEX 的支持。 现在试一下使用 SOUNDEX()函数进行搜索,它匹配所有发音类似于 Michael Green 的联系名: SELECT cust_name, cust_contact FROM Customers WHERE SOUNDEX(cust_contact) = SOUNDEX('Michael Green');   输出: cust_name cust_contact -------------------------- ---------------------------- Kids Place Michelle Green   8.2.2 日期和时间处理函数 为在 SQL Server 中检索 2012 年的所有订单,可如 下进行: SELECT order_num FROM Orders WHERE DATEPART(yy, order_date) = 2012;   Access SELECT order_num FROM Orders WHERE DATEPART('yyyy', order_date) = 2012;   PostgreSQL SELECT order_num FROM Orders WHERE DATE_PART('year', order_date) = 2012;   Oracle SELECT order_num FROM Orders WHERE to_number(to_char(order_date, 'YYYY')) = 2012;   完成相同工作的另一方法是使用 BETWEEN 操作符 SELECT order_num FROM Orders WHERE order_date BETWEEN to_date('01-01-2012') AND to_date('12-31-2012');   MySQL 和 MariaDB 用户可使用名为 YEAR()的函数从日期中提取年份: SELECT order_num FROM Orders WHERE YEAR(order_date) = 2012;   在 SQLite 中有个小技巧: SELECT order_num FROM Orders WHERE strftime('%Y', order_date) = '2012';     8.2.3 数值处理函数