2017年3月20日 星期一

一秒看懂SQL Server 2008日期时间类型区别

一开始学习数据库的基本数据类型,都为其数据类型的种类搞晕。为什么数据库需要那么多的数据类型,一个时间也可以分出6中数据类型。显然老微不是吃饱了撑着。这么做肯定是有目的的。假设当你的公司需要存储超过100万条数据,我们就假设使用int和bigint,int占空间是4字节表示范围是-2^31~2^31-1,也就是32位数据。bigint则是8字节,63位数据,假设我们在使用int足够存储的情况下,某位新用户设置为bigint类型进行存储,那么100万*4字节=3.814697265625MB。现在你也许会觉得不到4M的空间不足以考虑,好,那么我们数据是10亿条呢,而且数据中不可能就只有一列把3.8M*100*N=380M+。废话不多说,把类型分的那么细是肯定有原因的。 

让我们从最难的数据类型开始(我觉得是)

日期时间类型

date

time

datetime

datetime2

smalldatetime

datetimeoffset

[code]DATE
2015-12-01

TIME
09:25:09.2670000

DATETIME
12  1 2015  9:25AM

DATETIME2可以设置精度
DATETIME2
2015-12-01 09:25:09.2670000

DATETIME2(5)
2015-12-01 09:25:09.26700

SMALLDATETIME
12  1 2015  9:25AM

DATETIMEOFFSET
2015-12-01 09:25:09.2670000 +00:00


这是输出上面的源码

[code]DECLARE @dt AS DATE
SET @dt=GETDATE()
PRINT 'DATE';
PRINT @dt;
/*2015-12-01*/

DECLARE @dt2 AS TIME
SET @dt2=GETDATE()
PRINT 'TIME';
PRINT @dt2;
/*09:12:53.7830000*/

DECLARE @dt3 AS DATETIME
SET @dt3=GETDATE()
PRINT 'DATETIME';
PRINT @dt3;
/*12  1 2015  9:13AM*/

PRINT 'DATETIME2可以设置精度';
DECLARE @dt4 AS DATETIME2
SET @dt4=GETDATE()
PRINT 'DATETIME2';
PRINT @dt4;
/*2015-12-01 09:16:03.6300000*/

DECLARE @dt5 AS DATETIME2(5)
SET @dt5=GETDATE()
PRINT 'DATETIME2(5)';
PRINT @dt5;
/*2015-12-01 09:16:03.63000*/

DECLARE @dt7 AS SMALLDATETIME
SET @dt7=GETDATE()
PRINT 'SMALLDATETIME';
PRINT @dt7;
/*12  1 2015  9:18AM*/

DECLARE @dt8 AS DATETIMEOFFSET
SET @dt8=GETDATE()
PRINT 'DATETIMEOFFSET';
PRINT @dt8;
/*2015-12-01 09:18:54.5770000 +00:00*/


总结以上,date表示日期,time表示时间,datetime时间+日期 

datetime2[(n)]是精度可以改变的时间+日期,当然是指改变时间的精度啦。smalldatetime的结果类似于datetime,但是还是有区别的。 

smalldatetime的有效时间范围1900/1/1~2079/6/6 

datetime的有效时间范围1753/1/1~9999/12/31, 

smalldatetime精确到分钟,datetime精确到3.33ms。

from : http://www.lai18.com/content/9993824.html

沒有留言:

張貼留言