有关SQL Server 中 DateTime2类型的一些总结

一、DateTime vs DateTime2
1、从对应的日期格式来说, DateTime 的日期格式为 yyyy-MM-dd HH:mm:ss.fff ,而 DateTime2 的日期格式可以为 yyyy-MM-dd HH:mm:ss.fffffff ,定义字段时 DateTime2(n) 即为n个f,n最大为7;
2、从可以表示的范围来说, DateTime 的日期范围为 1753-01-01到 9999-12-31,而 DateTime2 的日期范围为 0001-01-01 到 9999-12-31;
3、从可以表示的精度来说, DateTime 的精度为3.33ms(虽然表示为3个f,精度并不是1ms,因为均会舍入到 .000、.003 或 .007 秒三个增量),而 DateTime2 的精度为100ns(与.Net中System.DateTime类型的可表示精度相同)。

二、DateTime及DateTime2的赋值
1、如果用SQL的日期函数进行赋值, DateTime 字段类型要用 GETDATE() , DateTime2 字段类型要用 SYSDATETIME() 。
2、如果用C#的参数化赋值,假如有变量 DateTime timestamp = DateTime.Now; ,将它赋值给 DateTime 字段直接使用以下代码 new SqlParameter("@Timestamp", this.timestamp); 即可:
 而赋值给DateTime2字段必须使用以下两种之一:

new SqlParameter("@Timestamp", timestamp.ToString("yyyy-MM-dd HH:mm:ss.fffffff"));

 或者

var pTimestamp = new SqlParameter("@Timestamp", SqlDbType.DateTime2);
pTimestamp.SqlValue = this.timestamp;

 三、DateTime及DateTime2的取值
无论从 DateTime 字段还是 DateTime2 字段取值,均应使用类似以下的方法:

Convert.ToDateTime(dr["TIMESTAMP"]);

而使用 DateTime.Parse(dr["TIMESTAMP"].ToString());  则不妥,因为 ToString() 会损失秒以下精度。除非使用带参数的ToString()方法,如 DateTime.Parse(dr["TIMESTAMP"].ToString(“yyyy-MM-dd HH:mm:ss.fffffff”));  

猜你喜欢

转载自www.cnblogs.com/ezgoal/p/9368601.html
今日推荐