• MySQL数据类型1


    decimal(a,b)

    参数说明

    a指定指定小数点左边+右边可以存储的十进制数字的最大个数,最大精度38。
    b指定小数点右边可以存储的十进制数字的最大个数。小数位数必须是从 0 到 a之间的值。默认小数位数是 0。

    例:decimal(4,2)   最大能存储 99.99

    4:表示小数位+整数位最多4位,对应MySQL设计表中字段  长度

    2:表示小数为最多2位,对应MySQL设计表中字段  十进位

    备注

    DECIMAL数据类型用于要求非常高的精确度的计算中,这些类型允许指定数值的精确度和计数方法作为选择参数。精确度在这里是指为这个值保存的有效数字的总个数,而计数方法表示小数点后数字的个数。例如,语句DECIMAL (5,2)规定了存储的值将不会超过5位数字,开且小数点后面有2位数字。

    实例

    SQL 代码   复制
    float f = 345.98756f;--结果显示为345.9876,只显示7个有效位,对最后一位数四舍五入。
    
    double d=345.975423578631442d;--结果显示为345.975423578631,只显示15个有效位,对最后一位四舍五入。
    
    --注:float和double的相乘操作,数字溢出不会报错,会有精度的损失。
    
    decimal dd=345.545454879.....--可以支持28位,对最后一位四舍五入。
    
    --:当对decimal类型进行操作时,数值会因溢出而报错。
    

    总结

    数值存储范围越小的精度越高,存储数值范围越大,精度就越不准确,如果存储正常金额的情况下,使用money,好处在于可以存储不指定的小数点位数的数值,比较真实。如果对于既要求精度,又固定小数点位数的数值存储,采用decimal(numeric),优点在于可以自定义小数点位数,精度高。如特殊情况,如数值范围巨大只能用float(real)类型了,此类型一般不提倡使用。

    以下内容为自己总结:

    mysql中的decimal字段,声明语法为DECIMAL(M,D)。
    DECIMAL(M,D)中D值的是小数部分的位数,若插入的值未指定小数部分或者小数部分不足D位则会自动补到D位小数,若插入的值小数部分超过了D为则会发生截断,截取前D位小数(四舍五入截取)。M值得是整数部分加小数部分的总长度,也即插入的数字整数部分不能超过M-D位,否则不能成功插入,会报超出范围的错误。

    decimal精度类型,函数完整格式DECIMAL(M,D)
    M是是只的最大精度数位,1-65
    D是小数点右侧数位0-30
    举例说明,11615.23653234568这个数存你说的三个格式
    decimal:11615
    decimal(3):999
    decimal(3,2):9.99
    decimal(10,5)11615.23653
    超出精度范围的数会被强制进位并只显示数据类型定义的格式

    2.Mysql支持的多种数据类型主要有:数值数据类型、日期/时间类型、字符串类型。

    整数

    浮点数&定点数

    注:定点数以字符串形式存储,对精度要求高时使用decimal较好;尽量避免对浮点数进行减法和比较运算。 

    numeric(M,D)

    在myslq5.0中,numeric和decimal数据类型是一致的,两者的精度均准确为M位数字。

    时间/日期类型

    字符串类型

    blog-二进制大对象,用来存储可变数量的数据。

    int(11)

        在SQL语句中int代表你要创建字段的类型,int代表整型,11代表字段的长度。
     这个11代表显示宽度,整数列的显示宽度与mysql需要用多少个字符来显示该列数值,与该整数需要的存储空间的大小都没有关系,比如,不管设定了显示宽度是多少个字符,bigint都要占用8个字节。
      int是整型,(11)是指显示字符的长度,但要加参数的,最大为255,比如它是记录行数的id,插入10笔资料,它就显示00000000001 ~~~00000000010,当字符的位数超过11,它也只显示11位,如果你没有加那个让它未满11位就前面加0的参数,它不会在前面加0
      声明整型数据列时,我们可以为它指定个显示宽度M(1~255),如INT(5),指定显示宽度为5个字符,如果没有给它指定显示宽度,MySQL会为它指定一个默认值。显示宽度只用于显示,并不能限制取值范围和占用空间,如:INT(3)会占用4个字节的存储空间,并且允许的最大值也不会是999,而是 INT整型所允许的最大值。

    mysql日期和字符相互转换方法

    date_format(date,'%Y-%m-%d %H:%i:%s')    -------------->oracle中的to_char();

    str_to_date(date,'%Y-%m-%d %H:%i:%s')     -------------->oracle中的to_date();

    %Y:代表4位的年份
    %y:代表2为的年份
     
    %m:代表月, 格式为(01……12)  
    %c:代表月, 格式为(1……12)
     
    %d:代表月份中的天数,格式为(00……31)  
    %e:代表月份中的天数, 格式为(0……31) 
     
    %H:代表小时,格式为(00……23)  
    %k:代表 小时,格式为(0……23)  
    %h: 代表小时,格式为(01……12)  
    %I: 代表小时,格式为(01……12)  
    %l :代表小时,格式为(1……12)
      
    %i: 代表分钟, 格式为(00……59) 

    %r:代表 时间,格式为12 小时(hh:mm:ss [AP]M)  
    %T:代表 时间,格式为24 小时(hh:mm:ss) 

    %S:代表 秒,格式为(00……59)  
    %s:代表 秒,格式为(00……59) 

    -----------------------------------------------------------------

    mysql 取一条离当前时间最近的记录
    # mysql写法
    SELECT *, ABS(NOW() - startTime)  AS diffTime
    FROM PolicyShuPrice
    ORDER BY diffTime ASC

    LIMIT 0, 1

    select  t.road_length, t.practitioner_num,  t.stations_num,
    t.bridge_num, t.tunnel_num, date_format(t.index_time,'%Y-%m-%d %h:%i:%s')
    from ix_road_basic_data  t
    where t.index_time = (select max(index_time) from ix_road_basic_data)
    limit 1

    # oracle写法
    SELECT * FROM (
        SELECT *, ABS(NOW() - startTime) AS diffTime
        FROM PolicyShuPrice
        ORDER BY diffTime ASC 
    ) C WHERE rownum=1


  • 相关阅读:
    链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.Ace.OleDb.12.0" 报错。提供程序未给出有关错误的任何信息。
    iis应用程序池 内存溢出错误 System.OutOfMemoryException
    高性能JavaScript
    HTML5介绍
    Ubuntu 16.04安装Matlab 2016b教程
    C Standard Library: 9 Signals: <signal.h>
    C Standard Library:4 Mathematical Functions: <math.h>
    C Standard Library: File Positioning Functions
    C Standard Library: Formatted Input
    C Standard Library: 2 Character Class Tests: <ctype.h>
  • 原文地址:https://www.cnblogs.com/lmg-jie/p/9945312.html
Copyright © 2020-2023  润新知