MySQL中的类型转换

强制类型转换

MySQL中提供了两个函数来实现强制类型转换,分别为convert和cast,这两个函数在将一个数值转换为其他类型时的作用几乎一样,写法上略有不同,但convert函数可以将一个值转为其他编码。参考MySQL手册说明:

编码转换:CONVERT(expr  USING transcoding_name),如

image

类型转换:CONVERT(expr , type) 或者 CAST(expr AS type),其中type为以下类型中的一种

  • BINARY [(N)]  转为二进制字符串,后面N为限定长度,有关BINARY类型的参考点这里
  • CHAR [(N)]
  • DATE   日期
  • DATETIME  日期时间
  • DECIMAL [(M[,D])]   转为浮点数,M为数字的长度(包括整数部分和小数部分),N为小数点后位数

转为DECIMAL类似C语言中的atoi函数,即从头扫描字符串直到第一个不为数字的字符截至,对截断的那一位进行四舍五入取整。

默认不限定M,N,转换是转为整数,按照小数点后第一位进行四舍五入。

image

限定M不限定N,则根据数字的位数输出整数,需要注意的是,当M的长度小于实际的数字位数时,会转化成设定为最大的,如下面这个转换,由于设置M为1,即显示不了21这个两位数,就会显示 1位数中最大的9。如果对于设定了小数点后位数N的限定,也会这样转换,同时必须先满足小数点后的N位小数。

image 位数不够显示全部,则

image  满足了1位小数,再取1位整数

image 必须先满足2位小数,不取整数部分。

正常的转换如下,尽可能的将M设置大,而N根据自己的需要选择保留几位小数。

image保留一位小数,第二位四舍五入

image保留两位小数

image保留三位小数,加0补齐位数

需要注意,尽管M可以设置的足够大而不影响数字的长度,但转换依然会先满足小数位数N的需要

image 满足9位小数,只剩1位整数只能取9。

  • SIGNED 有符号整数
  • TIME 日期的时间部分
  • UNSIGNED 无符号整数

image

其中上面的’2’-3由MySQL自动做了一次强制类型转换,根据四则运算将’2’转为了数字2。

自动类型转换

在进行一些四则运算以及逻辑运算时,MySQL也会根据计算的类型以及操作数的类型进行自动转换。

image 四则运算,转为数字操作

image 逻辑运算,转为0或1

image 位操作,转为数字的二进制位。

也可以一些自动进行数字以及字符串向date的转换,例如下面的操作

image

写码过程中碰到这样一个需求。一个table中一列是varchar类型,但是输入的类似是’1.23/张’ 这样的数据,即前面是一个类似单价的东西,后面只是加了一个说明,另外一列为int,需要计算两列的乘积。有了MySQL这样的自动类型转换,就不需要select后逐条的进行atoi的操作,并计算结果进行update了,特别是其中某些列中的数据不全,即varchar为NULL或者int为NULL,会自动不处理,相当的方便哈。如下。

image

最后一句,大爱MySQL哈!!!

转载请注明来源:Leoncom-《MySQL中的类型转换》
, , , ,
Trackback

no comment untill now

Add your comment now