我正在编写这段代码。这里的dt是作为函数的输入参数,一些整数也是如此。列Exp是一个T-SQL日期列,通过Linq以DateTime形式返回。
return (from a in dataContext.TableOfA
where a.name == "Test" &&
a.Exp.Value.AddDays(Convert.ToDouble(Someint)) >= new DateTimeOffset(dt)
select a).First();
在C#中,你可以将一个浮点数作为天数添加到日期时间中。也就是说,你可以加上1.5天。但在T-SQL中,你只能加上1天和12小时,并且必须为每个部分都添加一个整数。因此,当Linq将AddDays转换为T-SQL时,它会将我的天数转换为毫秒,并添加这些毫秒。这使得它能够给出与C#中双精度浮点数相同的精度。问题在于当这个值传递到SQL时,会出现如下错误信息:
“数据类型为date的dateadd函数不支持单位毫秒。”
基本上你不能向日期添加毫秒。那么我该如何解决这个问题呢?我想要向日期添加整数天数。难道唯一的方法就是向需要比较的另一个日期添加这些天数的负值吗?如果我想同时向两个列添加这些天数,该怎么办?
更新1:
Keith写道,“自从SQL Server 2000以来,T-SQL已经支持了类似datepart(毫秒,10000,myDate)这样的命令。这个错误表明你使用的任何数据库都不支持毫秒日期部分,这对我来说似乎很奇怪。”
请注意,我正在使用SQL Server 2008。它不支持DATE数据类型上的毫秒,但支持datetime。