2010-01-25 4 views
1

J'ai une procédure stockée qui prend un int pour le mois et l'année désirés comme paramètres. Il les utilise pour comparer certaines valeurs datetime des tables que je tire. J'ai besoin de les convertir en valeurs DateTime. Je suis en train de faire quelque chose comme ceci:Question sur la conversion d'ints en datetime dans TSQL

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

qui construit la chaîne « 01/06/2009 00:00:00 » (pour les valeurs des paramètres). Cela ne semble pas fonctionner, cependant, d'autres suggestions sur la façon de faire cela? Je pense que je vais sur ce trop comme un programmeur ...

C'est Sql Server 2008.

Répondre

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

devrait le faire

0

Qu'en est-:

DECLARE @year int; 
DECLARE @Month int; 

SET @year = 2010; 
SET @Month = 1 

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

Utilisez DATEADD.

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

dates de filtre en utilisant les fonctions YEAR et MONTH.

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