将 VARCHAR 转换为数据类型 INT [英] CONVERTING VARCHAR to DATA TYPE INT

查看:62
本文介绍了将 VARCHAR 转换为数据类型 INT的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码.Case 语句将列出的数字转换为文本,其余代码转换为 NULL,但我不断收到以下错误:CONVERSION FAILED WHEN CONVERTING THE VARCHAR VALUE 'RDG5' TO DATA TYPE INT.RDG5 是被转换为 NULL 的众多代码之一.有什么想法吗?

I have the following code. The Case statements are converting the listed numbers to text and the rest of the codes into NULL, but i keep getting the following error: CONVERSION FAILED WHEN CONVERTING THE VARCHAR VALUE 'RDG5' TO DATA TYPE INT. RDG5 is one of the many codes being converted to NULL. Any thoughts?

    SELECT     dbo.TACCPLI.SYS_EMP_ID_NR, MAX(dbo.TACCPLI.AML_TYP_CD) AS DEG, (CASE WHEN dbo.TACCPLI.AML_TYP_CD IN (20, 25) 
                      THEN 'Associates' WHEN dbo.TACCPLI.AML_TYP_CD IN (30, 35) THEN 'Bachelors' WHEN dbo.TACCPLI.AML_TYP_CD IN (40, 45) 
                      THEN 'Masters' WHEN dbo.TACCPLI.AML_TYP_CD IN (50) THEN 'PhD' ELSE NULL END) AS Degree_Level, dbo.TACCPLI.AML_TYP_CD
FROM         dbo.TACCPLI RIGHT OUTER JOIN
                          (SELECT     dbo.v_TMS_employee_HR.GEMSID, dbo.v_TMS_employee_HR.TMS_ID
                            FROM          dbo.v_TMS_employee_HR INNER JOIN
                                                   dbo.v_sc17_TMS_Data_Career_Meeting_Rating ON 
                                                   dbo.v_TMS_employee_HR.TMS_ID = dbo.v_sc17_TMS_Data_Career_Meeting_Rating.Employee_ID
                            WHERE      (LEFT(dbo.v_sc17_TMS_Data_Career_Meeting_Rating.Meeting_Readiness_Rating, 2) IN ('14', '15')) AND 
                                                   (dbo.v_TMS_employee_HR.Job_Group_Code >= '72') AND (dbo.v_TMS_employee_HR.Job_Group_Code <= '79') AND 
                                                   (dbo.v_sc17_TMS_Data_Career_Meeting_Rating.Plan_Year = 2012) AND (dbo.v_TMS_employee_HR.Region NOT IN ('12', '13', '16', '17'))
                            GROUP BY dbo.v_sc17_TMS_Data_Career_Meeting_Rating.Meeting_Readiness_Rating, dbo.v_TMS_employee_HR.GEMSID, dbo.v_TMS_employee_HR.TMS_ID) 
                      AS HPS ON dbo.TACCPLI.SYS_EMP_ID_NR = HPS.TMS_ID
GROUP BY dbo.TACCPLI.SYS_EMP_ID_NR, dbo.TACCPLI.AML_TYP_CD

推荐答案

根据您的评论

嗯,它正在尝试转换它,以便它可以执行 case 语句.不确定我喜欢那个,对我来说它应该因为类型不匹配而无法解析它.

Hmm it's trying to convert that so it can execute the case statement then. Not sure I like that, to me it should have just failed to parse it because of a type mismatch.

哼哼

这是一个脆弱的讨厌的bodge,但如果可以依赖 AML_TYP_CD 总是让它​​的最后两个字符是数字,那么

This is a fragile nasty bodge but if AML_TYP_CD can be relied on to always have it's last two chars being numeric then

CASE WHEN Right(dbo.TACCPLI.AML_TYP_CD,2) IN ('20', '25')

可能是一种方式,但看到20"和25"等有自己的含义,他们应该有自己的列.

might be a way to go, but seeing as '20' and '25' etc have their own meaning, they should have their own column.

这篇关于将 VARCHAR 转换为数据类型 INT的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆