错误:从字符串转换日期和/或时间时转换失败。(在过滤器中使用日期数据类型时)

时间:2016-06-07 02:22:24

标签: sql sql-server sql-server-2012

我试图获取一个select语句,它给出了特定日期值之间的值。但由于上述错误,我无法完成这一步。

我在下面创建了一个示例代码,用于复制错误。

有解决方案吗?

BEGIN
DECLARE @OutputTimeDimensionvalue AS VARCHAR (60)
SET @OutputTimeDimensionvalue = '2006-onward'

CREATE TABLE #TEMP1
(
Timevalue int,
TimedimensionDate date
)

INSERT INTO #TEMP1 VALUES (23,'2007-04-01'),(28,'2008-01-01'),(45,'2012-04-01')

select Timevalue from #TEMP1 where TimedimensionDate BETWEEN CONVERT(datetime,LEFT(@OutputTimeDimensionvalue, 4)+'-01-01')  AND 
CONVERT(datetime,RIGHT(@OutputTimeDimensionvalue, 4)+'-01-01')

DROP TABLE #TEMP1
END

1 个答案:

答案 0 :(得分:1)

您必须使用LEFT代替RIGHT才能获得年份:

SELECT Timevalue
FROM #TEMP1
WHERE
    TimedimensionDate BETWEEN 
        CONVERT(DATETIME, LEFT(@OutputTimeDimensionvalue, 4) + '-01-01') 
        AND CONVERT(DATETIME, LEFT(@OutputTimeDimensionvalue, 4) + '-01-01')

但是,我建议改为使用DATE类型,然后使用>=<进行比较:

DECLARE @OutputTimeDimensionvalue AS DATE = '20060101'

SELECT Timevalue
FROM #TEMP1
WHERE
    TimedimensionDate >= @OutputTimeDimensionvalue 
    TimedimensionDate < DATEADD(YEAR, 1, @OutputTimeDimensionvalue)

以上内容将在2016年为您提供TimeValues