2013-06-11 3 views
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 
+1

Если вы хотите DATA в течение определенного месяца, то помещаете месяц в место где только где месяц (ReferenceDate) = месяц (ReferenceDate) – chetan

+0

Каков тип 'ReferenceDate'? –

+0

@chetan: запрос, который выбирает столбец даты между двумя значениями, может использовать индекс в этом столбце - ваш запрос не сможет использовать такой индекс. –

ответ

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)) 
3
select TransactionCode 
from ReceiptsPayments 
where 
month(ReferenceDate) = month(@mydate) 
and 
year(ReferenceDate) = year(@mydate) ; 
+0

+1. хороший ответ. – Devart

+0

@Devart спасибо :) мы ответили одинаково. –

+0

Вы ответили первым. Неплохо. – Devart

4

Попробуйте один -

DECLARE @mydate DATETIME 
SELECT @mydate = GETDATE() 

SELECT TransactionCode 
FROM dbo.ReceiptsPayments 
WHERE MONTH(ReferenceDate) = MONTH(@mydate) 
    AND YEAR(ReferenceDate) = YEAR(@mydate) 
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 с компонентами времени.

Смежные вопросы