首页 > 解决方案 > 转换 varchar 值“|”时转换失败 数据类型 int

问题描述

输入是包含 7 列信息的单行或多行表我想将这 7 列转换为多行表,其中第一列重复,另外两列,第二列带有组件 ID,第三列是组件长度。

这是下面的原始问题。

  SELECT
        (CASE 
            WHEN SpecificationID = '889' AND RTTopEntryLength > '0' AND RTSideEntryLength > '0' 
               THEN CONVERT(varchar, (infill_id + '|' + infill_id + '|' + infill_id))
            WHEN SpecificationID = '889' AND RTTopEntryLength = '0' AND RTSideEntryLength > '0' 
               THEN CONVERT(varchar, (infill_id + '|' + infill_id))
            WHEN SpecificationID = '889' AND RTTopEntryLength > '0' AND RTSideEntryLength = '0' 
               THEN CONVERT(varchar, (infill_id + '|' + infill_id))
            ELSE CONVERT(varchar, infill_id) 
         END) AS 'InfillIDList'
    FROM 
        INFILLTABLE
    WHERE 
        SpecificationID = '889'

我收到此错误:

Msg 245, Level 16, State 1, Line 1  
Conversion failed when converting the varchar value '|' to data type int.

我在这里想念什么?我将整个字符串转换为 Varchar,为什么尝试再次转换为整数时出错?

标签: sqlsql-servertsql

解决方案


它试图处理这个:(infill_id+'|'+infill_id),并得到一个错误。您可以通过以下方式实现相同的结果:select 3+'jj'+2,您将看到消息:将 varchar 值 'jj' 转换为数据类型 int 时转换失败。

改变(infill_id+'|'+infill_id)concat(infill_id,'|',infill_id)

(它会在将结果转换为 varchar之前尝试评估为 int )

如果您真的感兴趣,为什么可以在这里阅读:https ://docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-服务器-ver15


推荐阅读