Sql 错误:从字符串转换日期和/或时间时转换失败(发生在where子句中)
我试图解决以下代码的错误,但不知道如何做到这一点 在where条件中,我检查了concat字符串,它们以字符串格式返回日期,但错误发生在转换过程中的某个地方 有人能告诉我在哪里以及如何解决这个问题吗 提示:Sql 错误:从字符串转换日期和/或时间时转换失败(发生在where子句中),sql,sql-server-2012,Sql,Sql Server 2012,我试图解决以下代码的错误,但不知道如何做到这一点 在where条件中,我检查了concat字符串,它们以字符串格式返回日期,但错误发生在转换过程中的某个地方 有人能告诉我在哪里以及如何解决这个问题吗 提示:ERSConstructedVariable\u ExecutionDate是表中的datetime数据类型 @OutputTimeDimensionvalue='1989-1998' 代码: 如果我理解正确,第二年从第8位开始,而不是第7位。但是,请尝试使用left()和right(): S
ERSConstructedVariable\u ExecutionDate
是表中的datetime
数据类型
@OutputTimeDimensionvalue
='1989-1998'
代码:
如果我理解正确,第二年从第8位开始,而不是第7位。但是,请尝试使用
left()
和right()
:
SELECT Column1, column2, column3
FROM Table1 CV
WHERE CV.ERSConstructedVariable_ExecutionDate BETWEEN
CONVERT(datetime2, CONCAT(LEFT(@OutputTimeDimensionvalue, 4), '-01-01')) AND
CONVERT(datetime2, CONCAT(RIGHT(@OutputTimeDimensionvalue, 4), '-01-01'))
如果我理解正确,第二年从第8位开始,而不是第7位。但是,请尝试使用
left()
和right()
:
SELECT Column1, column2, column3
FROM Table1 CV
WHERE CV.ERSConstructedVariable_ExecutionDate BETWEEN
CONVERT(datetime2, CONCAT(LEFT(@OutputTimeDimensionvalue, 4), '-01-01')) AND
CONVERT(datetime2, CONCAT(RIGHT(@OutputTimeDimensionvalue, 4), '-01-01'))
不要对没有转换号的日期使用CONVERT 鉴于
@OutputTimeDimensionvalue='1989-1998'
,我建议使用以下代码:
SELECT Column1,column2,column3
FROM Table1 CV
WHERE
CV.ERSConstructedVariable_ExecutionDate
BETWEEN CONVERT(
datetime2,
CONCAT(substring(@OutputTimeDimensionvalue,1,4),'0101'),
112
) AND
CONVERT(
datetime2,
CONCAT((substring (@OutputTimeDimensionvalue,8,4)),'0101'),
112
)
不要对没有转换号的日期使用CONVERT 鉴于
@OutputTimeDimensionvalue='1989-1998'
,我建议使用以下代码:
SELECT Column1,column2,column3
FROM Table1 CV
WHERE
CV.ERSConstructedVariable_ExecutionDate
BETWEEN CONVERT(
datetime2,
CONCAT(substring(@OutputTimeDimensionvalue,1,4),'0101'),
112
) AND
CONVERT(
datetime2,
CONCAT((substring (@OutputTimeDimensionvalue,8,4)),'0101'),
112
)
不要对没有转换编号的日期使用
CONVERT
。请参见此处:选择正确的格式并使用它。如果同时删除-
分隔符,则可以使用格式112。请注意,datetime2
也有一个时间组件。也许数据类型date
会更好?@Nick.McDermaid。虽然我同意转换数字是一个好主意,但SQL Server具有内置格式,可以独立于其他设置进行转换。所以像YYYY-MM-DDTHH:MM:SS一样,诸如YYYYMMDD(以及在几乎所有情况下YYYY-MM-DD)之类的ANSI标准格式都很容易得到支持。千万不要对没有转换号的日期使用CONVERT
。请参见此处:选择正确的格式并使用它。如果同时删除-
分隔符,则可以使用格式112。请注意,datetime2
也有一个时间组件。也许数据类型date
会更好?@Nick.McDermaid。虽然我同意转换数字是一个好主意,但SQL Server具有内置格式,可以独立于其他设置进行转换。因此,像YYYYMMDD(以及在几乎所有情况下YYYY-MM-DD)这样的ANSI标准格式都很容易得到支持,YYYY-MM-DDTHH:MM:SS也是如此。@gowthamramamoorth稍微观察一下,ExecutionDate
的结束日期范围可能是12-31,而不是01-01。。千万不要在日期没有转换号的情况下使用CONVERT
。@gowthamramamoorth稍微观察一下,ExecutionDate
的结束日期范围可能是12-31,而不是01-01。。切勿在日期没有转换号的情况下使用CONVERT
。