1 值与运算式
不论在执行查询或资料异动的时候,你都可能会使用各种不同种类的值(literal values) 来完成你的工作:
不同种类的值会有不同的用法与规定,可以搭配使用的运算子和函式也不一样。根据资料类型可以分为下列几种:
- 数值:可以用来执行算数运算的数值,包含整数与小数,分为精确值与近似值两种
- 字串:使用单引号或双引号包围的文字
- 日期/时间:使用单引号或双引号包围的日期或时间
- 空值:使用「NULL」表示的值
- 布林值:「TRUE」或「1」表示「真」,「FALSE」或「0」表示「假」
1.1 数值
数值分为「精确值(exact-value)」与「近似值(approximate-value)」两种。精确值在使用时不会因为进位而产生差异;使用近似值的时候,可能会因为进位而产生些微的差异。精确值使用一个明确的数字来表示一个整数或小数数值:
- 整数:没有小数的数字,范围从-9223372036854775808 到 9223372036854775807
- 小数:包含小数的数字,整数范围与上面一样,小数位数最多可以有 30 个
一般来说,使用精确值在执行各种算数运算的时候,所得到的结果都不会有误差的问题,你只要特别注意范围就可以了。例如下列这个比较奇怪的查询需求:
包含小数的数字,在整数部份的限制与整数相同,小数位数会有这样的限制:
近似值的的数字通常称为「科学表示法」,它使用下列的方式来表示一个数值:
这两种表示方式所代表的数值是这样计算的:
- XE+Y,X * 10Y,例如 5E+3,代表的数字为 5000
- XE-Y,X * 10-Y,例如 5E-3,代表的数字为 0.005
注:「XE+Y」格式中的「+」可以省略,例如「5E+3」与「5E3」是一样的。
使用近似值来表示一个数值的时候,你一定要牢记它是一个「近似值」,也就是它真正储存的数值可能不是你所看到的。下列的情况是你比较容易理解的:
不过下列的状况就会有不一样的结果:
第一个运算值采用精确值的方式,所以它们一定会相等;第二个运算使用近似值的方式,所以它们不一定相等。
1.2 字串值
字串值是以单引号或双引号包围的文字资料,就文字资料来说,你不会拿文字执行加、减、乘、除这类的算数运算。如果你拿字串来执行算数运算的话,MySQL 会先把字串中的内容转换为数字,然后再执行算数运算:
如果字串内容包含不是数值的文字,MySQL 在执行转换的时候会出现警告讯息:
字串与字串可以执行连接的运算,就是把一些字串的内容连接起来后,产生一个新的字串。要执行字串连接的工作,可以使用「||」运算子,这个运算子在条件的判断中是「或」的意思,如果你直接使用「||」运算子连接字串的话:
这是因为在预设的设定下,MySQL 把「||」运算子当成数值的「或」运算,所以会出现这样的情况;你可以透过设定 MySQL 的 SQL 模式,来改变这个预设处理方式:
SET sql_mode = 'PIPES_AS_CONCAT'
这个设定会把「||」运算子用在字串值的时候,把它当成「连接」运算子:
注:字串的连接也可以使用函式来处理,在这章的后面讨论;另外字串的比较因为跟编码有关,会在后面的章节详细讨论。
1.3 日期与时间值
日期与时间值(temporal values) 有下列几种:
- 日期:年年年年-月月-日日,
2007-01-01
- 日期时间:年年年年-月月-日日 时时:分分:秒秒,
2007-01-01 12:00:00
- 时间:时时:分分:秒秒:
12:00:00
在日期与时间值中西元年的部份,可以使用四个或两个数字。如果指定的两个数字是「70」到「99」之间,就代表「1970」到「1999」;如果是「00」到「69」之间,就代表「2000」到「2069」。日期值中预设的分隔字元是「-」,你也可以使用「/」,所以「2000-1-1」与「2000/1/1」都是正确的日期值。
日期时间资料可以使用在条件的判断外,也可以用来「运算」,不过当然不是数值的算数运算,而是「一个日期的 36 天后是哪一天」这类的运算,而且只能使用「+」与「-」的运算。它的语法是:
语法中的单位可以使用下列表格中的单位关键字:
- YEAR:年
- QUARTER:季
- MONTH:月
- DAY:日
- HOUR:时
- MINUTE:分
- SECOND:秒
注:上列「单位关键字」并没有列出所有的单位关键字,全部的单位关键字请参考 MySQL 手册「12.5. Date and Time Functions」。
1.4 NULL 值
「NULL」值的处理比任何其它型态的值都来得奇怪一些,它也是一个很常见的资料,可以用来表示「未知的资料」;而且它最特别的地方是「NULL 值与其它任何值都不一样,包含 NULL 自己」。
「NULL」是一个 SQL 关键字,大小写都可以。你已经知道判断一个栏位资料是否为「NULL」值的时候,跟其它一般资料判断是不一样的;如果算数运算式或比较运算式中有任何「NULL」值的话,结果都会是「NULL」:
SELECT NULL = NULL, NULL < NULL, NULL != NULL, NULL + 3
上列的查询所得到的结果全部都是「NULL」。所以在比较「NULL」值的时侯要使用下列的方式:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论