mysql shujuleixing1_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 代码   复制

None.gif

None.gif

float f = 345.98756f;--结果显示为345.9876,只显示7个有效位,对最后一位数四舍五入。

None.gif

None.gif

double d=345.975423578631442d;--结果显示为345.975423578631,只显示15个有效位,对最后一位四舍五入。

None.gif

None.gif

--注:float和double的相乘操作,数字溢出不会报错,会有精度的损失。

None.gif

None.gif

decimal dd=345.545454879.....--可以支持28位,对最后一位四舍五入。

None.gif

None.gif

--:当对decimal类型进行操作时,数值会因溢出而报错。

None.gif

总结

数值存储范围越小的精度越高,存储数值范围越大,精度就越不准确,如果存储正常金额的情况下,使用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支持的多种数据类型主要有:数值数据类型、日期/时间类型、字符串类型。

bb1aac7b34172ad982ddd30039ceddd7.png

整数

870235028f5f5cedad61ec598116a758.png

浮点数&定点数

d0a3f3e0f25b66cfbec92e5a82f22ed4.png

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

numeric(M,D)

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

时间/日期类型

74251fe886e3f6b8179a1ea6dc0aefbf.png

字符串类型

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

205fc808c840f2c64b2578ee32d3d281.png

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


版权声明:本文为weixin_28312391原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。