函数

与其他大多数计算机语言一样,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。因此,2005年9月1日,给出为2005-09-01。虽然其他的

日期格式可能也行,但这是首选的日期格式,因为它排除了多义性(如,

04/05/06是2006年5月4日或2006年4月5日或2004年5月6日或……)

应该总是使用4位数字的年份 支持2位数字的年份,MySQL

处理00-69为2000-2069,处理70-99为1970-1999。虽然它们可

能是打算要的年份,但使用完整的4位数字年份更可靠,因为

MySQL不必做出任何假定。

但是,使用 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 语句为:

如果要的是日期,请使用 Date() 如果你想要的仅是日期,

则使用 Date() 是一个良好的习惯,即使你知道相应的列只包

含日期也是如此。这样,如果由于某种原因表中以后有日期和

时间值,你的SQL代码也不用改变。当然,也存在一个 Time()

函数,在你只想要时间时应该使用它。

Date() 和 Time() 都是在MySQL 4.1.1中第一次引入的。

如果你想检索出2005年9月下的

所有订单,怎么办?简单的相等测试不行,因为它也要匹配月份中的天

数。有几种解决办法,其中之一如下所示

其中, BETWEEN 操作符用来把 2005-09-01 和 2005-09-30 定义为

一个要匹配的日期范围。

还有另外一种办法(一种不需要记住每个月中有多少天或不需要操

心闰年2月的办法)

Year() 是一个从日期(或日期时间)中返回年份的函数。类似,

Month() 从日期中返回月份。因此, WHERE Year(order_date)

= 2005 AND Month(order_date) = 9 检索出 order_date 为2005年9月的

所有行

MySQL的版本差异 MySQL 4.1.1中增加了许多日期和时间

函数。如果你使用的是更早的MySQL版本,应该查阅具体的

文档以确定可以使用哪些函数

数值处理函数

数值处理函数仅处理数值数据。这些函数一般主要用于代数、三角

或几何运算,因此没有串或日期 — 时间处理函数的使用那么频繁。

具有讽刺意味的是,在主要DBMS的函数中,数值函数是最一致最统

一的函数。表11-3列出一些常用的数值处理函数

本章介绍了如何使用SQL的数据处理函数,并着重介绍了日期处理函

数。

mysql将数字月份替换成文月份_mysql必知必会--使用数据处理函数相关推荐

  1. mysql 正则去小数位_mysql必知必会--用正则表达式 进行搜索

    正则表达式介绍 前两章中的过滤例子允许用匹配.比较和通配操作符寻找数据.对 于基本的过滤(或者甚至是某些不那么基本的过滤),这样就足够了.但 随着过滤条件的复杂性的增加, WHERE 子句本身的复杂性 ...

  2. mysql函桌为之一的_MYSQL必知必会读书笔记第十和十一章之使用函数处

    mysql简介 MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 拼接字段 存储在数据库表中的 ...

  3. mysql第四章分页显示查询出租房屋信息_MYSQL必知必会读书笔记第四章之检索数据...

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显 ...

  4. mysql必_MySQL必知必会(一)

    摘自<MySQL必知必会> 1.1.1 什么是数据库 数据库:保存有组织的数据的容器(通常是一个文件或一组文件) 人们通常用数据库这个术语来代表他们使用的数据库软件.这是不正确的,它是引起 ...

  5. mysql中用完即删用什么_MySQL使用和操作总结(《MySQL必知必会》读书笔记)

    简介 MySQL是一种DBMS,即它是一种数据库软件.DBMS可分为两类:一类是基于共享文件系统的DBMS,另一类是基于客户机--服务器的DBMS.前者用于桌面用途,通常不用于高端或更关键应用. My ...

  6. mysql必知必会_MySQL必知必会

    MySQL必知必会 联结的使用, 子查询, 正则表达式和基于全文本的搜索, 存储过程, 游标, 触发器, 表约束. 了解SQL 数据库基础 电子邮件地址薄里查找名字时, 因特网搜索站点上进行搜索, 验 ...

  7. mysql必学十大必会_MYSQL 学习(一)--启蒙篇《MYSQL必知必会》

    MYSQL必知必会 一. DDL 数据定义语言 Data Definition Language 是指CREATE,ALTER和DROP语句. DDL允许添加/修改/删除包含数据的逻辑结构,或允许用户 ...

  8. mysql数据库过滤空值_mysql必知必会--过 滤 数 据

    使用 WHERE 子句 数据库表一般包含大量的数据,很少需要检索表中所有行.通常只 会根据特定操作或报告的需要提取表数据的子集.只检索所需数据需要 指定搜索条件(search criteria),搜索 ...

  9. mysql必知必会的数据_MySQL必知必会--汇 总 数 据

    聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提 供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分 析和报表生成.这种类型的检索例子有以下几种. 确定表中行数 ...

最新文章

  1. LeetCode简单题之按键持续时间最长的键
  2. socket编程:多路复用I/O服务端客户端之poll
  3. 怎么去大蒜味(一定要看拉) - 生活至上,美容至尚!
  4. python处理数据的优势-选择python进行数据分析的理由和优势
  5. 阿里研究员谷朴:警惕软件复杂度困局
  6. copying mysql status_mysql慢查询copying to tmp table
  7. date日期相减 java_一个小小的Java程序
  8. 【Java】计算8+88+888+8888+....前12项的和
  9. Macaca:南方航空人工测试的拯救者
  10. 移动端媒体尺寸_网络推广外包浅析提升移动端网站建设效率有哪些网络推广外包技巧-企服...
  11. 使用STAR方法完善简历
  12. 面试小题,传入6返回9,传入9返回6
  13. vim - 之快速删除指定符号的内容
  14. 计算机房精密空调术语,机房空调常用单位及计算公式
  15. 人脸对齐中的相似性变换
  16. #pragma once用法总结和链接错误
  17. 常见的会员积分系统都有什么样的功能?
  18. freemark导出word全过程 + 图片不显示问题
  19. [Simulink] 从手写代码到自动生成代码
  20. mysql date 24小时制_SpringBoor连接mysql数据库取数据库中时间格式是12小时制的时间,如何显示成24小时制...

热门文章

  1. 出国计算机相关专业,加拿大计算机相关专业解析
  2. 5.19 对学生按姓名进行随机排序 [原创Excel教程]
  3. 空气质量天气质量数据来源整理
  4. thinkphp3.2读取Excel文件
  5. Android模拟器的判定
  6. 树形动态规划之树的最大独立集
  7. 提高系统开发效率的“银弹”——X-series可视化大规模应用开发工具集
  8. 微信二维码扫一扫打开手机外部浏览器打开指定HTML网页
  9. pacs通讯测试软件,全院级PACS系统模拟测试报告
  10. 域名前缀和后缀html,为什么域名前要加www前缀,www是什么意思? - 立金哥