将 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 时转换失败

将 varchar 值转换为数据类型 int 时转换失败

将 varchar 值“N”转换为数据类型 smallint 时转换失败

将 varchar 值“Collect_Date”转换为数据类型 int 时转换失败