【发布时间】:2021-12-30 17:07:19
【问题描述】:
在 SQL Server 2014 中,我尝试了以下查询:
select *
from MyTable
where StartDate = '2021-12-31T00:00:00.0000000'
我收到此错误:
消息 295,第 16 级,状态 3,第 3 行
将字符串转换为 smalldatetime 数据类型时转换失败。
据我所知,这个字符串是 ISO 8601 格式,所以它应该被 SQL Server 接受(我读到这实际上应该是向 SQL Server 传递日期时的首选格式)。
有没有办法告诉 SQL Server 接受这种格式?
请注意:此查询实际上是由 Linq 在 Entity Framework Core DataContext 中生成的,因此我无法以任何方式更改查询本身。
【问题讨论】:
-
降低时间组件的精度,因为它是
smalldatetime,而不是datetime:select * from MyTable where StartDate = '2021-12-31' -
也就是说,今天没有人应该使用
smalldatetime。你为什么不用datetime2? -
谢谢戴。正如我写的,这个查询是从 EF 生成的,所以我不能修改它......
-
我是说你首先需要改变你的数据库设计。
-
这看起来不像 EF Core 生成的查询。 EF Core 生成的查询将使用类型化的 parameter,它 是“将日期传递给 SQL Server 时的首选格式”,即将它们作为日期而不是字符串传递。
标签: sql-server tsql entity-framework-core