【问题标题】:T-SQL select records for the monthT-SQL 选择当月记录
【发布时间】:2011-07-15 06:55:11
【问题描述】:

我有一个名为logD 的表,其中有一个名为date 的字段(日期字段类型)。格式为“年-月-日” IE: 2011-04-11

如果今天的日期是 2011-07-31,我想要 7 月份的所有记录。如果今天的日期是 2011-02-14,我想要 2 月份的所有记录,依此类推。

我正在使用 SQL 2008 和报告服务来生成月度报告。

【问题讨论】:

  • 你试过什么?我们是来帮助解决问题的,而不是为你做你的工作。

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

试试这个:

SELECT *
  FROM logD
 WHERE YEAR(DATE) = YEAR(GetDate())
   AND MONTH(DATE)  = MONTH(GetDate())

【讨论】:

  • 您可以这样做,以便查询使用索引
【解决方案2】:

如果您在DATE 列上有索引,那么您可以试试这个:

SELECT *
FROM logD
WHERE [DATE] BETWEEN CONVERT(VARCHAR(6),GETDATE(),112)+'01' AND DATEADD(DAY,-1,DATEADD(MONTH,1,CONVERT(VARCHAR(6),GETDATE(),112)+'01'))

但是,伙计,它看起来很丑......

【讨论】:

  • +1 我打算提出同样的建议。给自己留一个 DATEADD 并将其重写为[date] >= {this month}+'-01' AND [date] < {next month}+'-01'
【解决方案3】:

试试这个:

DECLARE @firstOfMonth smalldatetime = dateadd(month,datediff(month,0,getdate()),0);

SELECT * FROM logD
WHERE [date] > @firstOfMonth 
AND   [date] < dateadd(month,1,@firstOfMonth);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-21
    • 2011-09-15
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多