【发布时间】:2020-01-07 18:01:58
【问题描述】:
对于字段 Q1_c 和 Q2_c,我收到“将 varchar 转换为 int 的错误”。
那些字段是CHAR(1),这些字段的值是1、2、3、4、5或U,但是当有U时它不会转换,所以我试图将U 的值更改为0 之类的其他值。我也尝试过CAST(a.q2_c as varchar(1)) = 'U' - 但这也不起作用。我应该使用INT 还是VARCHAR()?我也尝试过使用CONVERT 而不是CAST。
ALTER VIEW [dbo].[vCDCP_rptInfantImprove]
as
select distinct
IND.tb_cdcp_individuals as Individuals_IndividualID
, A.[tb_cdcp_individuals] as ATQInfant_IndividualID
, A.CreateDate as ATQInfant_CreateDate
, CAST(a.q1_c as varchar(3)) as A_Q1
, CAST(a.q2_c as varchar(3)) as A_Q2
---Infant Sum
, Sum(isnull(cast(a.Q1_c as int),0)) + Sum(isnull(cast(a.Q2_c as int),0)) as InfantSum
---Change U to 0
, case when CAST(a.q1_c as int) = 'U' then 0 else 0 end as Unknown1
, case when CAST(a.q2_c as int) = 'U' then 0 else 0 end as Unknown2
from DBO.tb_cdcp_ATQInfant a
left join DBO.tb_cdcp_individuals ind on a.[tb_cdcp_individuals] = ind.[tb_cdcp_individuals]
where ind.agegroup_c = 'C'
group by IND.tb_cdcp_individuals, A.tb_cdcp_individuals, A.CreateDate
, a.q1_c
, a.q2_c
GO
【问题讨论】:
-
好吧,
'U'不是int,那么您如何期望CAST(a.q1_c as int),更不用说CAST(a.q1_c as int) = 'U'工作了? -
我一点也不粗鲁,错误和数据实际上是在告诉你这里有问题。您收到一条错误消息,告诉您
'U'无法转换为int。您告诉我们您有一个专栏,您尝试转换为int的值为'1','2','3','4','5','U',而您然后重新尝试将转换后的int值与'U'进行比较;这实际上意味着您尝试将 letterU转换为int两次。那永远行不通。'U'不是数字。 -
@Dee 你能粘贴一些示例数据吗?在您的查询中,我看到 a.q1_c (和 a.Q2_c )被强制转换为 varchar(3) 和 int。因此,对本专栏所包含的数据类型感到困惑。提前谢谢你。
-
@sam 正如问题的第二句话所解释的,这些字段的值是 1、2、3、4、5 或 U。
-
@Dee 这个怎么样:a.q1_c = 'U' then 0 else a.q1_c end as Unknown1
标签: sql sql-server