一开始学习数据库的基本数据类型,都为其数据类型的种类搞晕。为什么数据库需要那么多的数据类型,一个时间也可以分出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
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
这是输出上面的源码
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。