Проверьте интервал дат с SQL Server - PullRequest
2 голосов
/ 23 декабря 2009

Привет в хранимой процедуре. Я хочу выбрать строки, которые находятся в интервале месяца, где @Anno - это год начала, а @Mese - месяц начала. Я пытаюсь это:

WHERE FinePeriodo >= CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime)
    AND FinePeriodo < 
           DATEADD(month, 10, CAST(
               (@Anno + '-' + @Mese + '-01 00:00:00') as datetime)) 

Но это не работает.

Как мне это сделать?

спасибо

Ответы [ 3 ]

0 голосов
/ 23 декабря 2009

Код ниже работает:

declare @anno VARCHAR(4)
declare @mese VARCHAR(2)

SET @Anno = '2006'
SET @mese = '6'

SELECT CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime) as BeginMOnth,
    DATEADD(month,10,CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime)) as EndMonth

select [name],crDate from sysobjects
WHERE crDate >= CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime)
          AND crDate < DATEADD(month,10,CAST((@Anno + '-' + @Mese + '-01 00:00:00') as datetime))

Использование таблицы sysobjects для тестирования.

  • Является ли ваше поле поиска действительной датой (вместо типа символа)
  • Возможно, у вас есть дополнительные пробелы и т. Д. В ваших переменных
  • Получаете ли вы ошибку или просто неверные записи обратно
0 голосов
/ 23 декабря 2009

Попробуйте: (сделать целые числа @Anno и @Mese)

  Where FinePeriodo Between DateAdd(month, 12*(@Anno-1900) + @Mese, 0)
                       And  DateAdd(month, 12*(@Anno-1900) + @Mese + 1, 0)
0 голосов
/ 23 декабря 2009

Прежде всего, чтобы ваша арифметика дат работала независимо от языка и региональных настроек на вашем сервере, используйте формат ISO-8601 YYYYMMDD для дат.

В этом случае вы должны иметь возможность сделать что-то вроде:

DECLARE @StartDate DATETIME
DECLARE @EndDate DATETIME

-- this assume @Anno and @Mese are already VARCHAR variables!
SET @StartDate = CAST(@Anno + RIGHT('00'+@Mese, 2) + '01' AS DATETIME)
SET @EndDate = DATEADD(MONTH, 1, @StartDate)

и затем в предложении WHERE используйте:

WHERE FinePeriodo BETWEEN @StartDate AND @EndDate

Может ли это работать на вас?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...