2010-01-25 2 views
1

У меня есть хранимая процедура, которая принимает int для желаемого месяца и года в качестве параметров. Он использует их для сравнения некоторых значений даты и времени из таблиц, из которых я выхожу. Мне нужно преобразовать их в значения DateTime. Я пытаюсь сделать что-то вроде этого:Вопрос о преобразовании ints в datetime в TSQL

CONVERT(DATETIME, CONVERT(varchar(4), @year) + '-' + Convert(varchar(2),@month) + '-01 00:00:00', 102)) 

, который строит «2009-6-1 00:00:00» строка (для тех значений параметров). Это, похоже, не работает, а какие-либо другие предложения о том, как это сделать? Я думаю, что я буду об этом слишком много, как программист ...

Это Sql Server 2008.

ответ

5
SELECT CAST(CAST(@Year AS VARCHAR(4)) + RIGHT('0' + CAST(@Month AS VARCHAR(2)), 2) + '01' AS DATETIME) 

Если это сделать

0

насчет:

DECLARE @year int; 
DECLARE @Month int; 

SET @year = 2010; 
SET @Month = 1 

SELECT CAST(LTRIM(@year * 10000 + @Month * 100 + 1) AS smalldatetime) 
0

Используйте DATEADD.

DATEADD(month, @month - 1, DATEADD(year, @year - 1900, 0)) 
0

даты фильтра с использованием YEAR и MONTH функции.

SELECT * 
FROM Sales 
WHERE YEAR(Sales.PurchaseDate) = @year 
AND MONTH(Sales.PurchaseDate) = @month