(浮点数和定点数都可以用类型名称后加(M,D)的方式来表示,
其中D位于小数点后面,M和D又称为精度和标度。)
一、浮点数float类型测试
1、创建一个表
示例:
mysql>create table test4(float_test float(5,2)) //一共5位,小数占2位
Query OK, 0 rows affected (0.00 sec)
2、查询表结构
示例:
mysql>desc test4
+------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+-------+
| float_test | float(5,2) | YES | | NULL | |
+------------+------------+------+-----+---------+-------+
1 row in set (0.00 sec)
(float(5,2)
5是整数加小数的总长
,2是小数长度。
整数意味只有3位长度。)
3、插入合法数据
示例:
mysql>insert into test4 values (10.2), (70.243), (70.246)
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
4、查询表内容
示例:
mysql>select * from test4
+------------+
| float_test |
+------------+
| 10.20 |
| 70.24 |
| 70.25 |
+------------+
3 rows in set (0.00 sec)
5、插入非法数据
示例:
mysql>insert into test4 values (1111.2)
ERROR 1264 (22003): Out of range value for column 'float_test' at row 1
二、LAB2:(精准小数decimal)
定点数decimal类型测试:
(定点数在MySQL内部以字符串形式存储,比浮点数更精确,
适合用来表示货币等精度高的数据。
decimal在不指定精度时,默认的整数位为10,默认的小数位为0)
1、创建一个表
mysql> create table test5(decimal_test decimal(5,2))
(总长度5位,小数占2位)
2、插入数据
示例:
mysql>insert into test5 values (70.245)
Query OK, 1 row affected, 1 warning (0.05 sec)
(注意有警告!! 超长部分不吉利,会四舍五入)
查看:mysql> select * from test5
3、请思考如何创建整数9位,小数5位的数据类型
三、区别
三者区别介绍:
1、float:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位)
2、double:双精度实型,含字节数为8,64bit数值范围-1.7E308~1.7E308(15个有效位)
3、decimal:数字型,128bit,常用于银行帐目计算。(28个有效位)
不知道你是oracle还是sql server?这个是个自连接问题,先要排序,标行号,再同表的上下行相比,所以是自连接orcale:
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)a,
(select vseq,declaredate,rownum as row from mac505 order by vseq,declaredate)b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000<b.declaredate
sql server由于只有2005以上版本才有row_number()函数,所以如下脚本只能用在2005以上版本中
select a.vseq,a.declaredate as declaredate1,b.declaredate as declaredate2
from
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )a,
(select vseq,declaredate,row_number() orver (order by vseq,declaredate) as row from mac505 )b
where a.vseq=b.vseq and a.row+1=b.row and a.declaredate+1000<b.declaredate
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)