2013-09-19 4 views
0

Good Day Каждый один момент им с помощью этой коды, чтобы получить данные, которые с в определенный месяцГод() функция и Month() функция

 SELECT * from Table1 d 
where 
MONTH(d.fld_ExpiryDate)[email protected] 
    AND YEAR(d.fld_ExpiryDate)[email protected] 

некоторые из моих коллег сказал мне, чтобы использовать длительность, например, ,

d.fld_LoanDate >= '2009-11-01' and 
d.fld_LoanDate < '2009-12-01' 

вопрос в том, было бы лучше использовать диапазон ?? и как бы я вычислил начало месяца и начало следующего месяца? если вход пользователей, где только @month int and @year int?

помощь будет весьма признателен им новое в TSQL, поэтому я не знаю работы обходные и Что хорошо или нет в кодировке ..

Спасибо :)

ответ

1

Я надеюсь, что это работает на вашем языке. Он создает строку типа «1/9/2013» и преобразует ее в datetime. Вы можете изменить его и построить строку вашего региональной конвенции:

declare @y int=2013 
,@m int=9 
,@lower datetime 
,@upper datetime 

set @lower=convert(datetime,'1/'+CONVERT(varchar(2),@m)+'/'+CONVERT(varchar(4),@y)) 
print @lower 
set @upper=DATEADD(m,1,@lower) 
print @upper 

Это использует DateAdd и является Propably лучше, но менее прозрачна:

declare @y int=2013 
,@m int=9 
,@lower datetime 
,@upper datetime 

select @lower=DATEADD(mm,@m-1,DATEADD(YY,@y-1900,0)) 
print @lower 
select @upper=DATEADD(m,1,@lower) 
print @upper 

(На SQL Server 2012 Вы бы DATETIMEFROMPARTS)

1

Диапазон лучше, если есть индекс на fld_LoanDate. Функция вокруг функций mont() и year() имеет тенденцию препятствовать использованию индекса.

+0

спасибо, сэр Гордон, любые советы о том, как я могу вычислить дату начала и дату начала следующего месяца? с вводом месяца и года в INT? извините за мое невежество. – user2705620

+0

Вы бы использовали функцию 'dateadd()', возможно, с днем ​​недели. –

+0

Индекс не будет использоваться при использовании функций, но даже без индекса диапазон будет работать быстрее. –

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