簡體   English   中英

獲取所選日期月份的第一天到最后一天之間的數據

[英]get data between first day and last day of month of selected date

如何在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

試試這個-

DECLARE @mydate DATETIME
SELECT @mydate = GETDATE()

SELECT TransactionCode 
FROM dbo.ReceiptsPayments 
WHERE MONTH(ReferenceDate) = MONTH(@mydate) 
    AND YEAR(ReferenceDate) = YEAR(@mydate)
select TransactionCode 
from ReceiptsPayments 
where 
month(ReferenceDate) = month(@mydate) 
and 
year(ReferenceDate) = year(@mydate) ;
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))

我自己使用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')

然后使用下個月的1號進行<比較。 通常,這對於具有時間成分的datetime更好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM