SQLCE:以下日期时间跨度意味着什么?

时间:2013-07-23 14:11:52

标签: sql-server-ce windows-ce

我是SQLCE的新手,我真的不了解我们使用的代码中的一些代码行。 有一个数据库记录,我们尝试检索日志数据,有人可以帮助我下面的代码检索哪些时间跨度?,因为在日志中的某个地方我们有时间跨度的错误,但我无法读取此格式(我是新来的)

d1 = (int)SqlHelper.ExecScalar("select count(*) from Report where OpenTime  > DATEADD(yy,DATEDIFF(yy,0,GETDATE()),0) and type='0'");

另外还有一个

 d2 = (int)SqlHelper.ExecScalar("select count(*) from Report where OpenTime  between DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) and DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0) and type='0'");

更新其SQLCE(服务器),一个在CE环境中使用的SQL数据库

d1和d2收到了什么日期时间跨度?

D1应该是一年的总数,但接缝错误

D2总共一个月也接缝错了?

2 个答案:

答案 0 :(得分:0)

我在sqlite language documentation中找不到任何DATEADD或DATEDIFF函数,但如果你的意思是在... SQL Server,快速谷歌搜索将为您提供这些two answers

  

DATEDIFF()函数返回两个日期之间的时间。

所以DATEDIFF(yy,0,GETDATE())将返回0到现在之间的年份时差。

  

DATEADD()函数从日期添加或减去指定的时间间隔。

所以DATEADD(yy,*your_time_difference*,0)会返回日期0并添加* your_time_difference *年。

类似于d2。

答案 1 :(得分:0)

在SQLServer中,前一个查询选择一个计数,其中type ='0',OpenTime大于一年中第一天的午夜;这应该被修改为>=(而不是>)以获得年初至今。

同样,在SQLServer中,后一个查询选择一个计数,其中type ='0',OpenTime在上个月的第一天的午夜和当月的第一天的午夜之间;这应该修改为:

OpenTime >= DATEADD(mm,-1,DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)) and
OpenTime < DATEADD(mm,DATEDIFF(mm,0,GETDATE()),0)

- 获得上个月的计数。