MySQL必知必会(11): 数据处理函数

前言

介绍什么是函数,MySQL支持何种函数,以及如何使用这些函数

1、函数

SQL支持利用函数来处理数据。函数一般是在数据上执行的,它给数据的转换和处理提供了方便。

如之前的RTrim()和LTrim()就是函数。

函数没有SQL的可移植性强

能运行在多个系统上的代码称为可移植的。相对来说,多数SQL语句是可移植的。在SQL实现之间有差异,这些差异通常不那么难处理。而函数的可移植性却不强,而且有时差异还很大。

为了代码的可移植,许多SQL程序员不赞成使用特殊实现的功能。虽然这样做很有好处,但不总是利于应用程序的性能。如果不适用这些函数,编写某些应用程序代码会很艰难,必须利用其它方法来实现DBMS非常有效地完成的工作。

如果你决定使用函数,应该保证做好代码注释,以便以后别人能确切知道编写SQL代码的含义。

2、使用函数

大多数SQL实现支持以下类型的函数

  • 用于处理文本串(如删除或填充值,转换值为大写或小写)的文本函数

  • 用于在数值数据上进行算术操作(如返回绝对值,进行代数运算)的数值函数

  • 用于处理日期和时间值并从这些值中提取特定成分(如返回两个日期之差,检查日期的有效性等)的日期和时间函数

  • 返回DBMS正使用的特殊信息(如返回用户登录信息,检查版本细节)的系统函数

2.1、文本处理函数

常用的文本处理函数

函数 说明
RTrim() 去除列值右边的空格
LTrim() 去除列值右左的空格
Upper() 将文本转换为大写
Lower() 将文本转换为小写
Left() 返回串左边的字符
Right() 返回串右边的字符
Length() 返回串的长度
Locate() 找出串的第一个子串
Soundex() 返回串SOUNDEX的值
SubString() 返回子串的字符
  • SOUNDEX是一个将任何文本串转换为描述其语音表示的字母数字模式的算法。SOUNDEX考虑了类似的发音字符和音节,使得能对串进行发音比较而不是字母比较。SOUNDEX不是SQL概念,但MySQL都提供了对SOUNDEX的支持。
mysql> select username from df_user where Soundex(username)=Soundex('admin');
+----------+
| username |
+----------+
| admin    |
+----------+
1 row in set (0.00 sec)

2.2、日期和时间处理函数

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

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

注意

MySQL使用的日期格式。无论什么时候指定一个日期,不管是插入或更新表值还是用where子句进行过滤,日期必须为格式yyy-mm-dd。

虽然其他的日期格式可能也行,但是这是首选的日期格式,因为它排除了多义性。

应该总是使用4位数字的年份

MySQL支持2位数字的年份

  • 处理00-69为2000-2069

  • 处理70-99为1970-1999

虽然他们可能是打算要的年份,但使用完整的4位数字年份更可靠,因为MySQL不必做出任何假定。

select cust_id, order_name
from orders
where order_date = '2005-09-01';

但是上述的SQL语句有问题,因为订单创建的时间是一个日期时间格式,可能为"2005-09-01 11:15:39",此时查询失败

解决办法:MySQL仅将给出的日期与列中的日期部分进行比较,而不是将给出的日期与整个列值进行比较,所以应该将SQL改为以下:

select cust_id, order_name
from orders
where Date(order_date) = '2005-09-01';
  • 如果要的是日期: 使用Date()

Date()、Time()都是在MySQL4.1.1中第一次引入的。

举例

  • 检索出2005年9月下的所有订单
select cust_id, order_num
from orders
where Date(order_date) between '2005-09-01' and '2005-09-30';
  • 不需要记住每个月多少天或不操心闰年2月的办法
select cust_id, order_num
from orders
where Year(order_date) =2005 and Month(order_date) = 9;

2.3、数值处理函数

数值处理函数仅能处理数值数据。这些函数一般主要用于代数、三角或集合运算,因此没有串货日期-时间处理函数的使用那么频繁。

常用的数值处理函数

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

你可能感兴趣的:(MySQL必知必会(11): 数据处理函数)