sql 2005 日期时间 数据类型
2013-04-19 15:59
295 查看
数据类型 | 范围 | 精确度 |
DATETIME | 1753年1月1日至9999年12月31日 | 3.33毫秒 |
SMALLDATETIME | 1900年1月1日至2079年6月6日 | 1分钟 |
这个限制来源于历史原因.
历史上,在西方有两种历法制度:
儒略历(Julian calendar)
格里历(Gregorian calendar)
二种历法对于同一天的记法,相差10到13天。所以,两种历法转换时,需要计算差值。
1752年,英国对历法进行了统一转换。 (在这一年的,1752-9-2日的下一天是1752-9-14)。
如果存储1753年之前的日期,必须说明是哪种历法制度,才能够得到准确的时间日期。
所以,Sybase及MicroSoft SQL Server都1753年最为最早的日期。(有根据的猜测)
存储格式
与1900-1-1相差的天数 | 从午夜0点开始 | 长度 | |
DATETIME | 4字节 | 4字节 [以3.333毫秒为单位的时间] | 8字节 |
SMALLDATETIME | 2字节 | 2字节 [以分钟为单位] | 4字节 |
由于DATETIME百分之三秒以及SMALLDATETIME分钟的单位限制。导致字符串与日期时间类型转换时,会发生取整问题。
例如:
DECLARE @value VARCHAR(20) SET @value = '20100625 21:12:51:001' SELECT CONVERT(DATETIME,@value) SELECT CAST(@value AS DATETIME) --2010-06-25 21:12:51.000 注意这里毫秒位置变为了000 SELECT CAST(@value AS SMALLDATETIME) --2010-06-25 21:13:00 注意这里分钟不是12 |
舍入到最近的可以被表示的DATETIME值。
毫秒部分的匹配规则为:[0-9][0-9][037]
0,1 舍入为0 || 2,3,4舍入为3 || 5,6,7,8舍入为7 || 9舍入为0
因为毫秒位的[999]会被舍入为1.000,所以,利用时间限定数据提取范围时,请使用下面的推荐形式:
WHERE dt >= '20100625 00:00:00.000' AND dt < '20100626 00:00:00.000' |
SQL2005没有单独的提供时间或日期的数据类型。单独获取日期需要用到以下方法:
SELECT DATEADD(d,DATEDIFF(d,0,GETDATE()),0) SELECT CAST(CONVERT(CHAR(8),GETDATE(),112)AS DATETIME) --2010-06-25 00:00:00.000 |
相关文章推荐
- sql日期时间戳数据类型巩固学习
- 6、SQL基础整理(日期时间数据类型,转换函数)
- MS SQL Server 2000中用于日期时间存储数据类型说明
- Sql Server2008 Transact-SQL 新兵器学习总结之-用户定义表类型和日期,时间数据类型
- SQL 对DateTime (时间和日期)数据类型的基本操作
- SQL中使用CONVERT函数对时间数据类型进行格式转化
- MySQL:MySQL日期数据类型、MySQL时间类型详解
- MSSQL 2008中新的时间日期数据类型
- mysql中使用sql语句插入日期时间类型的写法
- MySQL日期数据类型、时间类型使用总结
- MySQL 日期数据类型、时间类型使用总结
- SQL2005数据类型
- MySQL日期数据类型、时间类型使用总结
- XML简介Schema之 XSD 日期及时间数据类型 VS XSD 数值数据类型
- MySql数据类型分析(日期时间类型) Part5
- SQL2005常用时间类型转换
- jdbc的Date类型处理,解决java.util.date与java.sql.date的时间数据丢失
- SQL-2005系统数据类型说明
- PL/SQL 日期时间类型函数及运算
- sql2005数据类型