zoukankan      html  css  js  c++  java
  • 控制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;

       

       

       

       

       

  • 相关阅读:
    【FastJSON序列化】FastJSON序列化
    【EsayExcel】EsayExcel生成自定义表头
    时间序列的基础频率
    问题记录 --> 未定义的引用 ||| not found
    linux shell find 用法大全
    pgrep -f abc匹配出含abc的进程 ||||||| pid pkill -f abc
    >/dev/null 2>&1
    编译,发版,链接库问题
    shell 问题 source project_env.sh
    linux/ubuntu 压缩与解压
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8493640.html
Copyright © 2011-2022 走看看