控制mysql数字转换

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

   

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

mysql提供了两个数据类型:numericdecimal(可以近似的认为二都无区别),这两种数据类型可以轻松解决上面的问题:
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;

结果如下:

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

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

结果如下:

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

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

1format

可以通过mysqlFORMATX,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;

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

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

   

format的问题

测试 SELECT FORMAT(12562.6655,2);

结果:12,562.67

查看文档: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类型,不再是数字类型。

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

2truncate

select truncate(4545.1366,2);

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

3 convert

select convert(4545.1366,decimal102);

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

select convert(a,decimal) from test_number2;

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

   

   

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

语法示例:

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;

 

   

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

   

   

   

   

   

posted @ 2018-03-02 15:51  outback123  阅读(5208)  评论(0编辑  收藏  举报