Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sql转换日期转换错误的原因是什么?_C#_Sql_Sql Server_Datetime - Fatal编程技术网

C# sql转换日期转换错误的原因是什么?

C# sql转换日期转换错误的原因是什么?,c#,sql,sql-server,datetime,C#,Sql,Sql Server,Datetime,我正在使用以下代码: sqlcom.CommandText = "SELECT * FROM myTable" + " WHERE CAST(myTime AS DATE) >= CAST(@mySTime AS DATE)" + " AND CAST(myTime AS DATE) <= CAST(@myETime AS DATE)" + "order by my

我正在使用以下代码:

sqlcom.CommandText = "SELECT * FROM myTable"
                    + " WHERE CAST(myTime AS DATE) >= CAST(@mySTime AS DATE)"
                    + " AND CAST(myTime AS DATE) <= CAST(@myETime AS DATE)"
                    + "order by myTime ";

sqlcom.Parameters.AddWithValue("@mySTime", stime);
sqlcom.Parameters.AddWithValue("@myETime", etime);
例如,这会导致:

sTime = '2015-10-19 00:00:00';
eTime = '2015-10-19 23:59:59';
当显示在调试器中时(
stime
etime
有一些其他选项如何设置它们,这就是sql动态接收它们的原因,但在当前情况下,上述选项仍然有效)

现在,当我运行上面的SQL时,我甚至可以从当天获得所有信息! 但是,当我将
更改为DATE
时,它的工作原理是我只得到最后一天,而今天什么也没有得到

现在我的问题是:原始sql/日期比较失败有什么原因吗?(这可能是因为它只是毫秒-1,它把它四舍五入到第二天吗?或者还有其他原因吗?)

eTime=new DateTime(DateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day,0,0,0).AddDays(-1).AddDays(1).add毫秒(-1)

  • 为什么要使用
    .AddDays(-1).AddDays(1)
    。看起来没用

  • .add毫秒(-1)

您的数据类型是datetimedatetime的精度为3ms,增量为.000、003或.007秒。 因此,这3个值中的任何一个减去1(ms)都会被舍入回原始值:

xxx.000 - .001 = .999 => rounded to .000
xxx.003 - .001 = .002 => rounded to .003    
xxx.007 - .001 = .006 => rounded to .007    
这似乎也没用

围捕

'2015-10-19 23:59:59'
不会四舍五入,但
'2015-10-19 23:59:59.999'
将四舍五入为
'2015-10-20 00:00:00.000'
,因为
999
997
000
包围
000
是最接近的值


在处理连续数据时,我几乎总是建议使用一个包含的起点和一个独占的终点,同时使用
DateTime.Now.Date
是在没有时间的情况下获取今天日期的更好方法,而不是冒着新DateTime之类的代码的风险(DateTime.Now.Year、DateTime.Now.Month、DateTime.Now.Day,…
可能在午夜执行,因此得到的月/日不正确combination@Damien_The_Unbeliever这一点很好。主要是因为另一个例子,我把这个日期放在一起(有一个固定的日期,年,日)…将该文件复制并粘贴到datetime.now case^^')。关于端点的观点也很好!比如提到了它的缩写,我是如何将它们放在一起的,以防出现一些特定的参数,这些参数是在那里使用的命令。因此,我列出了它们,因为它们将在这种情况下被执行。因此,本质上,我从您那里读到的是调试器显示的内容(2015-10-19 23:59:59,对于eTime)是不是错了?当我看你的示例代码时,stime=etime-1s,但你的简化代码应该是-1ms。根据你的缩写代码,etime应该等于stimestime应该是18-10-2015 00:00:00,而etime至少应该是18-10-2015 23:59:59(ms我当时只想获得尽可能好的数据…..复制并粘贴了一个旧项目的基本思想,没有考虑到<第二天^^')。你应该在0h使用>=第1天,因为你知道这是一天的开始,<第2天在0h,因为这是第一天之前的开始。
xxx.000 - .001 = .999 => rounded to .000
xxx.003 - .001 = .002 => rounded to .003    
xxx.007 - .001 = .006 => rounded to .007