暂无 |

1 值与运算式

不论在执行查询或资料异动的时候,你都可能会使用各种不同种类的值(literal values)来完成你的工作:

mysql_04_snap_01

不同种类的值会有不同的用法与规定,可以搭配使用的运算子和函式也不一样。根据资料类型可以分为下列几种:

  • 数值:可以用来执行算数运算的数值,包含整数与小数,分为精确值与近似值两种
  • 字串:使用单引号或双引号包围的文字
  • 日期/时间:使用单引号或双引号包围的日期或时间
  • 空值:使用「NULL」表示的值
  • 布林值:「TRUE」或「1」表示「真」,「FALSE」或「0」表示「假」

1.1 数值

数值分为「精确值(exact-value)」与「近似值(approximate-value)」两种。精确值在使用时不会因为进位而产生差异;使用近似值的时候,可能会因为进位而产生些微的差异。精确值使用一个明确的数字来表示一个整数或小数数值:

  • 整数:没有小数的数字,范围从-9223372036854775808到9223372036854775807
  • 小数:包含小数的数字,整数范围与上面一样,小数位数最多可以有30个

一般来说,使用精确值在执行各种算数运算的时候,所得到的结果都不会有误差的问题,你只要特别注意范围就可以了。例如下列这个比较奇怪的查询需求:

mysql_04_snap_02

包含小数的数字,在整数部份的限制与整数相同,小数位数会有这样的限制:

mysql_04_snap_03

近似值的的数字通常称为「科学表示法」,它使用下列的方式来表示一个数值:

mysql_04_snap_04

这两种表示方式所代表的数值是这样计算的:

  • XE+Y,X * 10Y,例如5E+3,代表的数字为5000
  • XE-Y,X * 10-Y,例如5E-3,代表的数字为0.005

注:「XE+Y」格式中的「+」可以省略,例如「5E+3」与「5E3」是一样的。

使用近似值来表示一个数值的时候,你一定要牢记它是一个「近似值」,也就是它真正储存的数值可能不是你所看到的。下列的情况是你比较容易理解的:

mysql_04_snap_05

不过下列的状况就会有不一样的结果:

mysql_04_snap_06

 

第一个运算值采用精确值的方式,所以它们一定会相等;第二个运算使用近似值的方式,所以它们不一定相等。

1.2 字串值

字串值是以单引号或双引号包围的文字资料,就文字资料来说,你不会拿文字执行加、减、乘、除这类的算数运算。如果你拿字串来执行算数运算的话,MySQL会先把字串中的内容转换为数字,然后再执行算数运算:

mysql_04_snap_07

 

如果字串内容包含不是数值的文字,MySQL在执行转换的时候会出现警告讯息:

mysql_04_snap_08

 

字串与字串可以执行连接的运算,就是把一些字串的内容连接起来后,产生一个新的字串。要执行字串连接的工作,可以使用「||」运算子,这个运算子在条件的判断中是「或」的意思,如果你直接使用「||」运算子连接字串的话:

mysql_04_snap_09

 

这是因为在预设的设定下,MySQL把「||」运算子当成数值的「或」运算,所以会出现这样的情况;你可以透过设定MySQL的SQL模式,来改变这个预设处理方式:

	
SET sql_mode = 'PIPES_AS_CONCAT'

这个设定会把「||」运算子用在字串值的时候,把它当成「连接」运算子:

mysql_04_snap_10

 

注:字串的连接也可以使用函式来处理,在这章的后面讨论;另外字串的比较因为跟编码有关,会在后面的章节详细讨论。

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天后是哪一天」这类的运算,而且只能使用「 +」与「-」的运算。它的语法是:

mysql_04_snap_11

语法中的单位可以使用下列表格中的单位关键字:

  • 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」值的时侯要使用下列的方式:

mysql_04_snap_12

0

python教程
java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论