【问题标题】:Date grouping in a simple sql query简单 sql 查询中的日期分组
【发布时间】:2018-02-17 18:30:38
【问题描述】:

我需要一些有关 SQL 查询的帮助。我在 SQL Server 数据库中有一个包含三个字段的表。字段 1、字段 2 和日期字段。我想计算在任何给定时间返回了多少条记录,其中 Field1 匹配一个集合变量,Field2 匹配一个集合变量,并且 DateField 是在同一天(从上午 12:00 到下午 23:59 的 24 小时)

select count(*)
from TableA
where Field1 = 'A'
and Field2 = 'B'
and DateField = TODAY

我需要有关日期分组的帮助。任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    简而言之:

    and DateField >= TODAY and DateField < TOMORROW
    

    具体来说:

    and DateField >= cast(current_timestamp as date) and DateField < cast(dateadd(dd, 1, current_timestamp) as date)  
    

    您也可以使用BETWEEN,但我更喜欢独占上限。如果发现该方法不太容易出错,例如使用11:59pm 作为结束时间,并将从23:59.00123:59.997 的记录留下没有家,或者匹配实际上在明天午夜的记录。

    【讨论】:

    • and DateField &gt;= TODAY and DateField &lt; TOMORROW 等价于and DateField = TODAY,不是吗?
    • @Horaciux 仅当字段是没有时间组件的日期类型时。在 SQL 中,如果您将日期与日期时间进行比较,它会将前者转换为后者并比较值,就好像时间是午夜一样。
    【解决方案2】:

    这是你想要的吗?

    select count(*)
    from TableA
    where Field1 = 'A' and Field2 = 'B' and
          DateField = cast(getdate() as date);
    

    【讨论】:

    • 提到24hr day from 12:00am - 23:59pm 让我担心他实际上有一个DateTime 列,在这种情况下这个答案是错误的。
    • Joel 是正确的...这正是我所需要的,但它必须是精确的日期时间匹配...而且它不会......是否可以将其提取出来只是日期而不是日期时间?我真的不在乎它设置在什么时间......只要它在同一天
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    相关资源
    最近更新 更多