转换nvarchar值“ 5”时转换失败。数据类型为int

时间:2019-12-10 15:14:26

标签: sql-server

我正在尝试查询,但出现转换错误

SELECT 
        BANNER = 
        CASE LEFT(PERSONNUM, 2)
            WHEN 01 THEN 'HANNAFORD'
            WHEN 02 THEN 'INDEPENDENT'
            WHEN 03 THEN 'SWEETBAY' 
        END 
FROM VP_ALLPERSONV42 vp
GROUP BY vp.PERSONNUM

3 个答案:

答案 0 :(得分:0)

请确保您的LEFT(PERSONNUM)使用CAST OR CONVERT 函数来赋予数值:

CAST(LEFT(PERSONNUM, 2) AS INT)

OR:

 CONVERT(LEFT(PERSONNUM, 2), '888')

答案 1 :(得分:0)

在黑暗中完全刺破,但是您可以 使用CHARINDEX来查看.是否为第二个字符,然后仅返回第一个:

SELECT CASE LEFT(PERSONNUM, CASE CHARINDEX('.',PERSONNUM) WHEN 1 THEN 1 ELSE 2 END)
            WHEN 1 THEN 'HANNAFORD'
            WHEN 2 THEN 'INDEPENDENT'
            WHEN 3 THEN 'SWEETBAY'
       END AS BANNER
FROM VP_ALLPERSONV42 vp
GROUP BY vp.PERSONNUM;

返回前2个字符似乎很奇怪,但是,当您检查的值为123时;没有两个字符。

答案 2 :(得分:-1)

SELECT 
        BANNER = 
        CASE 
            WHEN LEFT(PERSONNUM, 2) ='01' THEN 'HANNAFORD'
            WHEN  LEFT(PERSONNUM, 2) ='02' THEN 'INDEPENDENT'
            WHEN  LEFT(PERSONNUM, 2) ='03' THEN 'SWEETBAY' 
        END 
FROM VP_ALLPERSONV42 vp