函数
与其他大多数计算机语言一样,SQL支持利用函数来处理数据。函数
一般是在数据上执行的,它给数据的转换和处理提供了方便。
在前一章中用来去掉串尾空格的 RTrim() 就是一个函数的例子
函数没有SQL的可移植性强 能运行在多个系统上的代码称
为可移植的(portable)。相对来说,多数SQL语句是可移植的,
在SQL实现之间有差异时,这些差异通常不那么难处理。而函
数的可移植性却不强。几乎每种主要的DBMS的实现都支持其
他实现不支持的函数,而且有时差异还很大。
为了代码的可移植,许多SQL程序员不赞成使用特殊实现的功
能。虽然这样做很有好处,但不总是利于应用程序的性能。如
果不使用这些函数,编写某些应用程序代码会很艰难。必须利
用其他方法来实现DBMS非常有效地完成的工作。
如果你决定使用函数,应该保证做好代码注释,以便以后你(或
其他人)能确切地知道所编写SQL代码的含义
使用函数
大多数SQL实现支持以下类型的函数。
用于处理文本串(如删除或填充值,转换值为大写或小写)的文
本函数。
用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)
的数值函数。
用于处理日期和时间值并从这些值中提取特定成分(例如,返回
两个日期之差,检查日期有效性等)的日期和时间函数。
返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本
细节)的系统函数
文本处理函数
使用 Upper() 函数
如所见, Upper() 将文本转换为大写,因此本例子中每个供
应商都列出两次,第一次为 vendors 表中存储的值,第二次作
为列 vend_name_upcase 转换为大写
表11-1中的 SOUNDEX 需要做进一步的解释。 SOUNDEX 是一个将任何文
本串转换为描述其语音表示的字母数字模式的算法。 SOUNDEX 考虑了类似
的发音字符和音节,使得能对串进行发音比较而不是字母比较。虽然
SOUNDEX 不是SQL概念,但MySQL(就像多数DBMS一样)都提供对
SOUNDEX 的支持。
下面给出一个使用 Soundex() 函数的例子。 customers 表中有一个顾
客 Coyote Inc. ,其联系名为 Y.Lee 。但如果这是输入错误,此联系名实
际应该是 Y.Lie ,怎么办?显然,按正确的联系名搜索不会返回数据,如
下所示
现在试一下使用 Soundex() 函数进行搜索,它匹配所有发音类似于
Y.Lie 的联系名
在这个例子中, WHERE 子句使用 Soundex() 函数来转换 cust_
contact 列值和搜索串为它们的 SOUNDEX 值。因为 Y.Lee 和
Y.Lie 发音相似,所以它们的 SOUNDEX 值匹配,因此 WHERE 子句正确地过滤
出了所需的数据
日期和时间处理函数
期和时间采用相应的数据类型和特殊的格式存储,以便能快速和
有效地排序或过滤,并且节省物理存储空间。
一般,应用程序不使用用来存储日期和时间的格式,因此日期和时
间函数总是被用来读取、统计和处理这些值。由于这个原因,日期和时
间函数在MySQL语言中具有重要的作用
用日期进行过滤需要注意一些别的问题和使用特殊的
MySQL函数。
首先需要注意的是MySQL使用的日期格式。无论你什么时候指定一
个日期,不管是插入或更新表值还是用 WHERE 子句进行过滤,日期必须为
格式yyyy-mm-dd。因此,9月1日,给出为-09-01。虽然其他的
日期格式可能也行,但这是首选的日期格式,因为它排除了多义性(如,
04/05/06是5月4日或4月5日或5月6日或……)
应该总是使用4位数字的年份 支持2位数字的年份,MySQL
处理00-69为2000-2069,处理70-99为1970-1999。虽然它们可
能是打算要的年份,但使用完整的4位数字年份更可靠,因为
MySQL不必做出任何假定。
但是,使用 WHERE order_date = '-09-01' 可靠吗? order_
date 的数据类型为 datetime 。这种类型存储日期及时间值。样例表中
的值全都具有时间值 00:00:00 ,但实际中很可能并不总是这样。如果
用当前日期和时间存储订单日期(因此你不仅知道订单日期,还知道
下订单当天的时间),怎么办?比如,存储的 order_date 值为
-09-01 11:30:05 ,则 WHERE order_date = '-09-01' 失败。
即使给出具有该日期的一行,也不会把它检索出来,因为 WHERE 匹配失
败。
解决办法是指示MySQL仅将给出的日期与列中的日期部分进行比
较,而不是将给出的日期与整个列值进行比较。为此,必须使用 Date()
函数。 Date(order_date) 指示MySQL仅提取列的日期部分,更可靠的
SELECT 语句为:
如果要的是日期,请使用 Date() 如果你想要的仅是日期,
则使用 Date() 是一个良好的习惯,即使你知道相应的列只包
含日期也是如此。这样,如果由于某种原因表中以后有日期和
时间值,你的SQL代码也不用改变。当然,也存在一个 Time()
函数,在你只想要时间时应该使用它。
Date() 和 Time() 都是在MySQL 4.1.1中第一次引入的。
如果你想检索出9月下的
所有订单,怎么办?简单的相等测试不行,因为它也要匹配月份中的天
数。有几种解决办法,其中之一如下所示
其中, BETWEEN 操作符用来把 -09-01 和 -09-30 定义为
一个要匹配的日期范围。
还有另外一种办法(一种不需要记住每个月中有多少天或不需要操
心闰年2月的办法)
Year() 是一个从日期(或日期时间)中返回年份的函数。类似,
Month() 从日期中返回月份。因此, WHERE Year(order_date)
= AND Month(order_date) = 9 检索出 order_date 为9月的
所有行
MySQL的版本差异 MySQL 4.1.1中增加了许多日期和时间
函数。如果你使用的是更早的MySQL版本,应该查阅具体的
文档以确定可以使用哪些函数
数值处理函数
数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角
或几何运算,因此没有串或日期 — 时间处理函数的使用那么频繁。
具有讽刺意味的是,在主要DBMS的函数中,数值函数是最一致最统
一的函数。表11-3列出一些常用的数值处理函数
本章介绍了如何使用SQL的数据处理函数,并着重介绍了日期处理函
数。
如果觉得《mysql将数字月份替换成文月份_mysql必知必会--使用数据处理函数》对你有帮助,请点赞、收藏,并留下你的观点哦!