1

如何在SQL中获取特定月份的第一天和最后一天之间的数据?

以下是sql查询,请帮忙

DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()
select TransactionCode from ReceiptsPayments 
where ReferenceDate >= (SELECT CONVERT(VARCHAR(25),
                                       DATEADD(dd,-(DAY(@mydate)-1),@mydate),
                                       101) AS Date_Value)
  AND ReferenceDate <= (SELECT CONVERT(VARCHAR(25),
                                       DATEADD(dd,
                                               -(DAY(DATEADD(mm,1,@mydate))),
                                               DATEADD(mm,1,@mydate)),
                                       101))
GO
4

4 回答 4

4

试试这个——

DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()

SELECT TransactionCode 
FROM dbo.ReceiptsPayments 
WHERE MONTH(ReferenceDate) = MONTH(@mydate) 
    AND YEAR(ReferenceDate) = YEAR(@mydate)
于 2013-06-11T06:38:10.847 回答
3
select TransactionCode 
from ReceiptsPayments 
where 
month(ReferenceDate) = month(@mydate) 
and 
year(ReferenceDate) = year(@mydate) ;
于 2013-06-11T06:37:19.327 回答
0

我自己使用DATEADD/DATEDIFF模式:

select TransactionCode from ReceiptsPayments
where
    ReferenceDate >= DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20010101') and
    ReferenceDate <= DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20010131')

这有点可爱,因为当它被要求在任何一个月的 31 日添加几个月时,它会自动调整到它到达的月份的正确结束日期。

此外,如果您的列中有时间,更好的查询将是:

select TransactionCode from ReceiptsPayments
where
    ReferenceDate >= DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20010101') and
    ReferenceDate < DATEADD(month,DATEDIFF(month,'20010101',GETDATE()),'20010201')

然后使用下个月的第一天并进行<比较。datetime这对于具有时间分量的 s 通常更好。

于 2013-06-11T06:55:37.783 回答
0
DECLARE @mydate DATETIME 
SELECT @mydate = GETDATE() 

select TransactionCode 
  from ReceiptsPayments 
 where ReferenceDate >= DATEADD(month, DATEDIFF(month, 0, @mydate), 0)
   and ReferenceDate <= DATEADD(day, -1, DATEADD(month, DATEDIFF(month, 0, @mydate) + 1, 0))
于 2013-06-11T06:32:20.380 回答