Sql 内部联接上的转换失败
我正在尝试将一个smallint字段内部联接到varchar字段上。我只需要整数值,但我得到一个错误。varchar字段包含整数和字符串。我不需要ID字段,只需要描述 我得到一个错误: 将varchar值“AWOL”转换为数据类型smallint时,转换失败 这是表格的外观:Sql 内部联接上的转换失败,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我正在尝试将一个smallint字段内部联接到varchar字段上。我只需要整数值,但我得到一个错误。varchar字段包含整数和字符串。我不需要ID字段,只需要描述 我得到一个错误: 将varchar值“AWOL”转换为数据类型smallint时,转换失败 这是表格的外观: ================================== |ID |DESC | |==========|=====================| |ACAMP
==================================
|ID |DESC |
|==========|=====================|
|ACAMPROCAL|acamprosate calcium |
|----------|---------------------|
|BUPROPION |bupropion |
|----------|---------------------|
|1 |Other |
|----------|---------------------|
|4 |Expired |
|----------|---------------------|
|3 |Dschg |
|----------|---------------------|
|AWOL |Absence without Leave|
==================================
以下是我尝试过但也被注释掉的查询:
SELECT
CASE_NUM, LAST_NAME, FIRST_NAME, MI, '' AS NA,
DOB, SEX, [ADDRESS], '' AS NA, CITY, STATE, ZIP
--,CONVERT(SMALLINT, CONVERT(VARCHAR(55), CDTBL1.[DESC]))
--,CASE WHEN CDTBL1.ID BETWEEN 1 AND 99999 THEN CDTBL1.[DESC]
--END AS COUNTY
FROM
CDCLIENT
INNER JOIN
CDTBL1 ON CDCLIENT.ADDR_COUNTY_ID = CDTBL1.ID
如果需要非负整数,请使用如下逻辑:
select (case when CDTBL1.[DESC] not like '%[^0-9]%'
then convert(smallint, CDTBL1.[DESC])
end)
请注意,您可能还需要检查字段的长度和值,以确保不会出现错误
在SQL Server 2012+中,可以使用try\u convert()
简化此过程:
如果发生错误,则返回
NULL
。但是,它在SQL Server 2008中不可用。如果需要非负整数,请使用如下逻辑:
select (case when CDTBL1.[DESC] not like '%[^0-9]%'
then convert(smallint, CDTBL1.[DESC])
end)
请注意,您可能还需要检查字段的长度和值,以确保不会出现错误
在SQL Server 2012+中,可以使用try\u convert()
简化此过程:
如果发生错误,则返回NULL
。但是,它在SQL Server 2008中不可用。更改
'ON CDCLIENT.ADDR_COUNTY_ID = '
到
'ON CAST(CDCLIENT.ADDR_COUNTY_ID as varchar) = '
您应该检查要连接的列的数据类型,以确保它们是相同的类型。
一般来说,我认为ID列应该是某种类型的int,但是上面提供的表在ID列中也包含varchar值
SQL中的数据类型具有优先级,smallint在varchar之上。发生了导致故障的隐式转换
更多信息请点击此处:更改
'ON CDCLIENT.ADDR_COUNTY_ID = '
到
'ON CAST(CDCLIENT.ADDR_COUNTY_ID as varchar) = '
您应该检查要连接的列的数据类型,以确保它们是相同的类型。
一般来说,我认为ID列应该是某种类型的int,但是上面提供的表在ID列中也包含varchar值
SQL中的数据类型具有优先级,smallint在varchar之上。发生了导致故障的隐式转换
此处的详细信息:这是隐式转换的问题,SQL Server选择了错误的数据进行转换。通常,当您需要比较不同的数据类型时,通常最好显式地将一种数据类型转换为另一种数据类型 微软有一张漂亮的桌子
这是隐式转换的问题,SQL Server选择了错误的数据进行转换。通常,当您需要比较不同的数据类型时,通常最好显式地将一种数据类型转换为另一种数据类型 微软有一张漂亮的桌子
可以在联接的两侧执行
强制转换为varchar
吗?可以在联接的两侧执行强制转换为varchar
吗?