MySQL使用数据处理函数

使用数据处理函数

1. 文本处理函数

函 数 说 明
Left() 返回串左边的字符
Length() 返回串的长度
Locate() 找出串的一个子串
Lower() 将串转换为小写
LTrim() 去掉串左边的空格
Right() 返回串右边的字符
RTrim() 去掉串右边的空格
Soundex() 返回串的SOUNDEX值
SubString() 返回子串的字符
Upper() 将串转换为大写

SOUNDEX是一个将任何文本转换为其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。虽然SOUNDEX不是SQL概念,但MySQL(就像多数DBMS一样)都提供对
SOUNDEX的支持。

​ 下面给出一个使用Soundex()的例子。customer表中有一个顾客Coyote Inc.,其联系名为Y.Lee。但如果这是输入错误,此联系人名实际是Y.Lie,怎么办?显然,按正确的联系名搜索不会返回数据,如下所示:

输入:

SELECT cust_name,cust_contact
FROM customers
WHERE cust_contact = 'Y.Lie';

输出:

cust_name cust_contact
   

现在试一下使用Soundex()函数进行搜索,它匹配所有发音类似于Y.Lie的联系名:

输入:

SELECT cust_name,cust_contact
FROM customers
WHERE Soundex(cust_contact) = Soundex('Y Lie');

输出:

cust_name cust_contact
Coyote Inc. Y Lee

分析:在这个例子中,WHERE子句使用Soundex()函数来转换cust_ contact列值和搜索串为它们的SOUNDEX值。因为Y.LeeY.Lie发音相似,所以它们的SOUNDEX值匹配,因此WHERE子句正确地过滤出了所需的数据。


2.2 日期和时间处理函数

​ 日期和时间采用相应的数据类型和特殊的格式存储,以便能快速和有效地排序或过滤,并且节约物理存储空间。

​ 一般,应用程序不使用用来存储日期和时间的格式,因此日期和时间函数总是被用来读取、统计和处理这些值。由于这个原因,日期和时间函数在MySQL语言中具有重要的作用。

​ 常用日期和时间处理函数

函 数 说 明
AddDate() 增加一个日期(天、周等)
AddTime() 增加一个时间(时、分等)
CurDate() 返回当前日期
CurTime() 返回当前时间
Date() 返回日期时间的日期部分
DateDiff() 计算两个日期之差
Date_Add() 高度灵活的日期运算函数
Date_Format() 返回一个格式化的日期或时间串
Day() 返回一个日期的天数部分
DayOfWeek() 对于一个日期,返回对应的星期几
Hour() 返回一个时间的小时部分
Minute() 返回一个时间的分钟部分
Month() 返回一个日期的月份部分
Now() 返回当前日期和时间
Second() 返回一个时间的秒部分
Time() 返回一个日期时间的时间部分
Year() 返回一个日期的年份部分

​ 用日期进行过滤需要注意一些别的问题和使用特殊的MySQL函数。

​ 首先需要注意的是MySQL使用的日期格式。无论你什么时候指定一个日期,不管是插入或更新表值还是用WHERE子句进行过滤,日期必须为格式yyyy-mm-dd。因此,2005年9月1日,给出为2005-09-01。虽然其他的日格式可能也行,但这是首选的日期格式,因为它排除了多义性(如,04/05/06是2006年5月4日或2006年4月5日或2004年5月6日或……)。

因此,基本的日期比较应该很简单:

输入:

SELECT cust_id,order_num
FROM orders
WHERE order_date = '2005-09-01';

输出:

cust_id order_num
10001 20005

分析:此SELECT语句正常运行。它检索出一个订单记录,该订单记录的order_date为2005-09-01。

​ 但是,使用WHERE order_date = '2005-09-01'可靠吗?order_ date的数据类型为datetime。这种类型存储日期及时间值。样例表中的值全都具有时间值00:00:00,但实际中很可能并不总是这样。如果用当前日期和时间存储订单日期(因此你不仅知道订单日期,还知道下 订 单 当 天 的 时 间 ), 怎 么 办 ? 比 如 , 存 储 的 order_date 值 为2005-09-01 11:30:05,则WHERE order_date = '2005-09-01'失败。即使给出具有该日期的一行,也不会把它检索出来,因为WHERE匹配失败。

​ 解决办法是指示MySQL仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较。为此,必须使用Date()函数。Date(order_date)指示MySQL仅提取列的日期部分,更可靠的SELECT语句为:

输入:

SELECT cust_id,order_num
FROM orders
WHERE Date(order_date) = '2005-09-01';

如果你想检索出2005年9月下的所有订单,怎么办?简单的相等测试不行,因为它也要匹配月份中的天数。有几种解决办法,其中之一如下所示:

输入:

SELECT cust_id,order_num
FROM orders
WHERE Date(order_date) BETWEEN '2005-09-01' AND '2005-09-30';

输出:

cust_id order_num
10001 20005
10003 20006
10004 20007

分析:其中,BETWEEN操作符用来把2005-09-01和2005-09-30定义为
一个要匹配的日期范围。

​ 还有另外一种办法(一种不需要记住每个月中有多少天或不需要操
心闰年2月的办法):

输入:

SELECT cust_id,order_num
FROM orders
WHERE Year(order_date) = 2005  AND Month(order_date) = 9;

分析: Year()是一个从日期(或日期时间)中返回年份的函数。类似Month()从日期中返回月份。因此,WHERE Year(order_date) = 2005 AND Month(order_date) = 9检索出order_date为2005年9月的所有行。


2.3 数值处理函数

函数 说明
Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

 

版权申明:本站文章均来自网络,如有侵权,请联系01056159998 邮箱:itboby@foxmail.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

猜你还会喜欢下面的内容

    无相关信息

中国领先的互联网域名及云服务提供商

为您提供域名,比特币,P2P,大数据,云计算,虚拟主机,域名交易最新资讯报道

域名注册云服务器