我试图解决以下代码的错误,但不知道如何执行此操作。错误:从字符串转换日期和/或时间时发生转换失败(发生在where子句中)
在where条件中,我检查了以字符串格式返回日期的concat字符串,但错误发生在转换的某处。
有人可以让我知道在哪里以及如何解决这个问题。
提示:ERSConstructedVariable_ExecutionDate
是表中的datetime
数据类型。
@OutputTimeDimensionvalue
= '1989年至1998年'
代码:
SELECT
Column1, column2, column3
FROM
Table1 CV
WHERE
CV.ERSConstructedVariable_ExecutionDate
BETWEEN CONVERT(datetime2, CONCAT(substring(@OutputTimeDimensionvalue, 1, 4), '-01', '-01'))
AND CONVERT(datetime2,CONCAT((substring (@OutputTimeDimensionvalue, 7, 4)), '-01', '-01'))
千万不要使用'CONVERT'对一个日期,而无需转换数。看到这里:https://msdn.microsoft.com/en-us/library/ms187928.aspx选择正确的格式并使用它。如果完全删除'-'分隔符,则可以使用格式112.请注意'datetime2'也有一个时间分量。也许数据类型'日期'会更好? –
@ Nick.McDermaid。 。 。虽然我同意转换数字是一个好主意,但SQL Server具有内置格式,可以很容易地转换*独立于其他设置*。因此,YYYYMMDD(几乎在所有情况下YYYY-MM-DD)等ANSI标准格式都很容易支持,YYYY-MM-DDTHH:MM:SS也是如此。 –