控制mysql数字转换

在实际工作中我们常常需要将数字进行格式化,比如将12.0073233变为12.01,或把12变为12.00,或把12变为0000012,这种格式之间的转换总结如下:

 
 

一,浮点数的转换——直接设置数据库中的字段信息

mysql提供了两个数据类型:numeric和decimal(可以近似的认为二都无区别),这两种数据类型可以轻松解决上面的问题:
NUMERIC 和 DECIMAL 类型被 MySQL 以同样的类型实现,这在 SQL92 标准中是允许的。他们用于保存对准确精度有重要要求的值,例如与金钱有关的数据。当以它们中的之一声明一个列时,精度和数值范围可以(通常是)被指定;例 如:salary DECIMAL(5,2)在这个例子中,5 (精度(precision)) 代表重要的十进制数字的数目,2 (数据范围(scale)) 代表在小数点后的数字位数。在这种情况下,因此,salary 列可以存储的值范围是从 -99.99 到 99.99。(实际上 MySQL 在这个列中可以存储的数值可以一直到 999.99,因为它没有存储正数的符号)。M 与D 对DECIMAL(M, D) 取值范围有影响(当超过范围时mysql会自动处理,这会导致数据不准确),所以在建表时要考虑的所存数据的大小范围。

在建表时直接指定字段信息,或建表之好更新字段信息:

创建表:create table test_number(a numeric(10,2), b DECIMAL(10,2))engine myisam charset utf8;

插入数据:insert into test_number values (12.06722,13.223343);

查找数据:select * from test_number;

结果如下:

控制mysql数字转换

可以看出,数据在数据库中已按要求的格式进行存储。

查看创建表过程:show create table test_number;

结果如下:

控制mysql数字转换

说明在Mysql内部,全部都是以decimal的方式建表的,所以可以说numeric和decimal是相同的

浮点数的转换——对查询数据格式化

1、format

可以通过mysql的FORMAT(X,D)就可以控制数据X的小数点为D位了

创建表:create table test_number2 (a float)engine myisam charset utf8;

插入数据:insert into test_number2 values ( 12.06722);

一般查询:select * from test_number2;

查询位数比原插入时多:select format(a,10) from test_number2;

控制mysql数字转换

查询位数比原插入时少:select format(a,2) from test_number2;

控制mysql数字转换

可以看出,以这种方式可以实现查询数据的格式化,但是仍是有问题

 
 

format的问题

测试 SELECT FORMAT(12562.6655,2);

结果:12,562.67

控制mysql数字转换

查看文档:Formats the number X to a format like '#,###,###.##', rounded to D decimal places, and returns the result as a string. If D is 0, the result has no decimal point or fractional part.意思是整数部分超过三位的时候以逗号分割,并且返回的结果是string类型的。他会四舍五入的方式,但是得到的结果是string类型,不再是数字类型。

没有达到预期结果,想要的结果不要以逗号分隔,

2、truncate

select truncate(4545.1366,2);

结果:4545.13,直接截取不四舍五入,还是有问题。

3、 convert

,2);

结果:4545.14,得到的结果仍是数据,所以在对数据查询格式化时应采用这种方法

select convert(a,decimal) from test_number2;

控制mysql数字转换

select convert(a,decimal(10,2)) from test_number2;

控制mysql数字转换

 
 

 
 

三、整数的转换——直接设置数据库中的字段信息

语法示例:

create table stu ( stu_id int(5) unsigned zerofill not null default 0 primary key,class_id int(5))

 
 

四,整数数的转换——对查询数据格式化

 
 

select lpad(stu_id,10,'0') lpad(class_id,10,'0') from stu;

 

控制mysql数字转换

 
 

select lpad(stu_id,10,0), lpad(class_id,10,0) from stu;

 
 

控制mysql数字转换

 
 

 
 

 
 

 
 

上一篇:C 转义字符说明


下一篇:一个「学渣」从零开始的Web前端自学之路