2010-01-25 119 views
1

我有一个存储过程,它将所需月份和年份的int作为参数。它使用这些来比较我所从表中的一些日期时间值。我需要将它们转换为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

使用YEARMONTH函数过滤日期。

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