根据当前日期计数寄存器

时间:2018-03-15 01:58:03

标签: sql sql-server

我的表格的创建日期如下:

SELECT [CreationDate] FROM Store.Order

因此每个寄存器都有一个日期时间,如:

 2018-03-14 00:00:00.000
 2017-04-14 00:00:00.000
 2017-06-14 00:00:00.000

我想知道如何COUNT只注册Date等于当前月份和年份,例如在这种情况下,如果我只有一个 在03月注册我只计算1,我怎样才能实现呢?此致

2 个答案:

答案 0 :(得分:2)

这是一个选项:

SELECT COUNT(*)
FROM Store.Order
WHERE
    CONVERT(varchar(7), [CreationDate], 126) = CONVERT(varchar(7), GETDATE(), 126);

Demo

我们可以将表格中的创建日期和当前日期转换为yyyy-mm字符串,然后检查它们是否相等。

答案 1 :(得分:0)

最有效的方法是:

where creationdate >= dateadd(day, 1 - day(getdate(), cast(getdate() as date)) and
      creationdate < dateadd(month, 1, dateadd(day, 1 - day(getdate(), cast(getdate() as date)))

虽然这看起来比其他解决方案更复杂,但所有复杂性都在getdate()上 - 这意味着优化器可以使用creationdate上的索引。