DATE
很多人都比较迷惑在不需要日期精确的情况下却存储了许多不应该存储的。比如你只需要精确到日期,却不需要小时分秒,但是目前的日期类数据类型却不允许这样,如果转成char型,也是很不值得。
一条这样的语句:

(当然这个实现还是可以多样的,你可以使用Between and 来绕弯实现利用索引的。原文举例的是这个语句)
但是如果有只是存储整数部分的日期就好了。2008版的date类型就是你想要的!
(补充一下:mssql里面对日期类型的存储是这样的:将日期部分存储成一个整数,将日期的后面的屁股存储成小数部分,然后拼加在一起存在数据库内是一个类似于float类型的数据。具体可以演练这样一段代码:






附带:date的取值范围是0001-01-01 到9999-12-31
TIME
这个类型也就顾名思义其实就是刚才date类型的尾巴,取值范围是00:00:00.0000000 到23:59:59.9999999
DATETIME2
这个类型是让你可以指定时间的精确度,比如:







Fraction |
Output |
0 |
2007-10-28 22:11:20 |
1 |
2007-10-28 22:11:19.7 |
2 |
2007-10-28 22:11:19.70 |
3 |
2007-10-28 22:11:19.703 |
4 |
2007-10-28 22:11:19.7030 |
5 |
2007-10-28 22:11:19.70300 |
6 |
2007-10-28 22:11:19.703000 |
7 |
2007-10-28 22:11:19.7030000 |
DATETIMEOFFSET
主要是针对时区来的,可以在时间上加上时区。例如:













如果需求需要将日期和时间都分别存储,并且分别建立索引,甚至是联合索引,那么如何得到一个真正的时间呢?













参考自:http://www.sql-server-performance.com/articles/dev/datetime_2008_p1.aspx