我正在尝试做一个动态表,其中,列数取决于日期范围。因此,我正在尝试使用数据透视表。每次我运行查询时,都会出现以下错误:
Msg 241, Level 16, State 1, Line 18
Conversion failed when converting date and/or time from character string.
这是查询(MSSQL):
DECLARE @StartDate AS DATETIME
DECLARE @EndDate AS DATETIME
DECLARE @Query NVARCHAR(MAX)
DECLARE @Str_Dates NVARCHAR(MAX)
SET @StartDate = '2014-05-01'
SET @EndDate = '2014-05-16'
SELECT @Str_Dates = STUFF(( SELECT DISTINCT
'],[' + CONVERT(VARCHAR(10),CreateDate,111)
FROM myDB.dbo.SaleTransaction
WHERE CreateDate BETWEEN @StartDate AND @EndDate
ORDER BY 1
FOR XML PATH('')
), 1, 2, '')
+ ']'
SET @Query =
'SELECT * FROM
(
SELECT CreateDate AS [DATE], ItemID, Description, SUM(Quantity) AS [QTY]
FROM myDB.dbo.SaleTransactionDetails
WHERE CreateDate BETWEEN '+@StartDate+' AND '+@EndDate+'
GROUP BY CreateDate, ItemID, Description
) tpvt
PIVOT (SUM(tpvt.QDE) FOR tpvt.DATE
IN ('+@Str_Dates+')) AS pvt'
EXECUTE (@Query)
如果我删除WHERE CreateDate BETWEEN '+@StartDate+' AND '+@EndDate+'
查询,运行不会出现问题。因此,我尝试CONVERT
以多种方式使用函数将变量转换为日期,但是没有成功。
知道我该怎么做才能使用此变量并且没有该错误吗?
WHERE CreateDate BETWEEN '+@StartDate+'
您不能将字符串连接(+)为日期时间。
在动态SQL中将其转换为带引号的字符串:
'CreateDate BETWEEN ''' + CONVERT(VARCHAR(8), @StartDate, 112) + ''' AND ...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句