DateTime数据类型保存问题(DateTime2)

DateTime And DateTime2

问题:

从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

原因:

EF中model存在datetime类型的字段,如果不进行赋值,默认会生成0001-01-01 0:00:00的时间值,这个值属于datetime2类型,存储到数据库会进行报错。

解决方式:

1.将数据库中的所有的datetime类型的字段的数据类型均改为datetiem2

2.将model中的datetime类型修改为datetime?

3.存储的时候,将datetime类型的值进行赋值操作,=DateTime.Now;

注释:

DateTime2是从SQL2008开始支持一个新的日期数据类型。
DateTime字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fff,3个f,精确到1毫秒(ms),示例2014-12-0317:06:15.433。DateTime支持日期从1753年1月1日到9999年12月31日,时间部分的精确度是3.33毫秒,它需要8字节的存储空间。

DateTime2字段类型对应的时间格式是yyyy-MM-dd HH:mm:ss.fffffff,7个f,精确到0.1微秒(μs),示例2014-12-0317:23:19.2880929。DateTime2则支持从0001年01月01日到9999年12月31日,时间部分的精度是100纳秒,占用6到8字节的存储空间,取决于存储的精度。DateTime2(N)表示了秒钟的精度,N=0到7,表示精确到秒钟后的几位数。DateTime(0)表示精确到秒;DateTime2(3)相当于原始的DateTime类型,但是能精确到1毫秒,占用7字节;DateTime2(7)则能达到最高的精度,100纳秒。

如果用SQL的日期函数进行赋值,DateTime字段类型要用GETDATE(),DateTime2字段类型要用SYSDATETIME()。

时间: 2024-12-08 23:33:13

DateTime数据类型保存问题(DateTime2)的相关文章

解决从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值的问题

场景: ASP.NET MVC项目中,使用entity framework添加数据遇到"从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值"这个错误问题.后经过问题的排查,是由于C#代码中实体类所传入的DateTime类型属性没有赋值的原因,其中主要涉及到SQL Server 中datetime2的时间精度和日期范围的问题. 条件分析: SQL Server数据库版本中有datetime2类型 数据库中,某个要进行添加或者修改操作的字段的数据类型为

从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

最近在ASP.NET MVC中遇到一个问题,如题,在使用EF数据模型的时候,要去添加一条新的数据到Sqlserver数据库,在之前项目中并没有出现该异常,所以去扒了扒demo,发现有几个字段(数据库类型为datetime)savechange的时候默认绑定了datetime.now.问题就在这里,我的新项目并没有给定这几个字段的数据.下面总结下: 触发该错误的条件如下: SQL Server数据库版本中的字段类型为datetime2 数据库中,某个要进行Add或者Edit的字段的数据类型为dat

asp.net MVC中使用entity framework出现从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值”的处理

方法一: 使用DateTime类型的字段在作为参数传入到数据库前记得赋值,并日期要大于1753年1月1日. 方法二: 将DateTime类型的字段修改为DateTime?类型,由于可空类型的默认值都是为null,所以传入数据库就可以不用赋值,数据库中的datetime类型也支持null. 方法三: 将数据库中的datetime类型修改为datetime2类型

SQL Server datetime数据类型设计、优化误区

一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你看到表的记录如下图所示,你最先想到的是什么呢? (图1:数据列表) 你看到这些数据,是不是觉得这样的设计既浪费了存储空间,又使得这个列的索引增大,查询起来更慢,你也想使用一些其它的数据类型来代替这个datetime吧? 其实大家都是这么想的,这个方向是100%正确的,但是在写这篇文章以前,我进入了两个误区:(如果你中了下面的两个误区,那么请你看看这篇文章吧.)

MySQL datetime数据类型设置当前时间为默认值

环境:MySQL Sever 5.1 + MySQL命令行工具 问题:MySQL datetime数据类型设置当前时间为默认值 解决: 方法一: 由于MySQL目前字段的默认值不支持函数,所以以create_time datetime default now() 的形式设置默认值是不可能的.代替的方案是使用TIMESTAMP类型代替DATETIME类型. TIMESTAMP列类型自动地用当前的日期和时间标记INSERT或UPDATE的操作.如果有多个TIMESTAMP列,只有第一个自动更新. 自

ServiceStack DateTime数据类型转Json出现的困扰

原文:ServiceStack DateTime数据类型转Json出现的困扰 执行dotnet-new selfhost sstest 创建项目,然后打开解决方案 修改ssTest.ServiceModel中的Hello.cs,在HellopResponse中添加时间属性,然后修改MyServices中的代码 运行程序,打开Postman查看返回结果 可以看到Json中date属性返回的是  "date": "/Date(1555810731732+0800)/",

sql server2000中使用convert来取得datetime数据类型样式(全)

日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/ CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/ 语句及查询结果:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect

SQL Server datetime 数据类型的问题

近日,在查一个收银报表时,发现一个问题,就是SQL Server中时间日期的字符串值转datetime 类型时,出现了奇怪的事情. 查询如下: 需查询2015-07-01这天的收银数据.传入的日期为:开始日期 '2015-07-01 00:00:00.000' , 结束日期 '2015-07-01 23:59:59.999' . 查询后,发现此收银报表的赠送金额和其它报表的赠送金额对不上.经跟踪发现,赠送金额是有一个表A存储的,A表的日期字段为char类型,仅保存了日期部分的值. 当我们传人的结

sql server2000中使用convert来取得datetime数据类型样式(转)

日期数据格式的处理,两个示例: CONVERT(varchar(16), 时间一, 20) 结果:2007-02-01 08:02/*时间一般为getdate()函数或数据表里的字段*/ CONVERT(varchar(10), 时间一, 23) 结果:2007-02-01 /*varchar(10)表示日期输出的格式,如果不够长会发生截取*/ 语句及查询结果:Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AMSelect