【问题标题】:SQLCE: what does the following date time span mean?SQLCE:以下日期时间跨度是什么意思?
【发布时间】:2013-07-23 14:11:52
【问题描述】:

我是 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而且接缝也错了?

【问题讨论】:

  • 第一个在 SQL Server 中返回 2013-01-01 00:00:00.000。第二个返回 2013-06-01 00:00:00.000 和 2013-07-01 00:00:00.000
  • 为什么单引号里是零?
  • Report.Type 列的数据类型是什么?
  • 我不知道为什么它是单引号,我不知道这些行应该返回什么,我希望有人能告诉我。因为我们记录的内容在某些日期不会正确。

标签: sql-server-ce windows-ce


【解决方案1】:

我在sqlite language documentation 中找不到任何 DATEADD 或 DATEDIFF 函数,但如果您指的是例如SQL Server,谷歌快速搜索会给你这些twoanswers

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

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

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

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

d2 类似。

【讨论】:

    【解决方案2】:

    在 SQLServer 中,前一个查询选择类型 = '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)
    

    - 获取上个月的计数。

    【讨论】:

      猜你喜欢
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-05-30
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      相关资源
      最近更新 更多