将 varchar 值“Q4”转换为数据类型 int 时转换失败
Posted
技术标签:
【中文标题】将 varchar 值“Q4”转换为数据类型 int 时转换失败【英文标题】:Conversion failed when converting the varchar value 'Q4' to data type int 【发布时间】:2015-03-31 21:30:31 【问题描述】:CREATE TABLE Persons
(
PRE_DTR nvarchar(20),
TR_PRE_DTR nvarchar(20)
);
INSERT INTO Persons(PRE_DTR, TR_PRE_DTR)
VALUES ('10.12.2014', '');
INSERT INTO Persons(PRE_DTR, TR_PRE_DTR)
VALUES ('10.12.2014', '');
SELECT
PRE_DTR,
CASE
WHEN DATEPART(MONTH, PRE_DTR) IN (10, 11, 12)
THEN CONVERT(NVARCHAR(20), DATEPART(MONTH, PRE_DTR) + 'Q4')
END AS TR_PRE_DTR
FROM
Persons
当我运行这个查询时,我收到了这个错误:
。
我该如何解决?
谢谢
【问题讨论】:
您的语法显示为“SQL Server”,但问题被标记为“mysql”。请适当标记您的问题。 【参考方案1】:运算符+
已重载。当任何参数是数字时,它意味着加法。当所有参数都是字符串时,表示字符串连接。
datepart()
返回一个数字,因此您必须将其转换为字符值。就个人而言,我更喜欢函数month()
而不是datepart()
,所以:
select PRE_DTR,
(case when month(PRE_DTR) IN (10, 11, 12)
then convert(nvarchar(20), MONTH(PRE_DTR)) + 'Q4')
end) AS TR_PRE_DTR
from Persons;
您的查询已接近。但是你在做+
之前 convert()
。因此出现了错误,因为月份仍然是一个数字。
【讨论】:
以上是关于将 varchar 值“Q4”转换为数据类型 int 时转换失败的主要内容,如果未能解决你的问题,请参考以下文章
将 varchar 数据类型转换为 datetime 数据类型导致值超出范围的问题
将varchar值'N'转换为数据类型smallint时,转换失败。
将 varchar 值“AND ID =”转换为数据类型 int 时转换失败