2013-06-19 113 views
-1

我正在使用case语句为给定代码返回1,2,3,4或6。 db中的代码存储为(varchar(8),null),但由于某些原因,SQL在后台自动执行此操作,或者我指示了它,但是出现错误将数据类型varchar转换为数字,我不明白为什么。 SQL Server 2008中以下是我写:将数据类型varchar转换为数字时出错

DECLARE @CM TABLE (
ENCOUNTER_ID VARCHAR(200) 
, [MRN CM] VARCHAR(200) 
, NAME VARCHAR(500) 
, [CC GRP ONE SCORE] VARCHAR(2) 
--, [CC GRP TWO SCORE] VARCHAR(20) 
--, [CC GRP THREE SCORE] VARCHAR(20) 
--, [CC GRP FOUR SCORE] VARCHAR(20) 
--, [CC GRP FIVE SCORE] VARCHAR(20) 
--, [CC LACE SCORE] VARCHAR(20) 
) 
--##################################################################### 

INSERT INTO @CM 
SELECT 
C.PT_NO 
, C.MED_REC_NO 
, C.PT_NAME 
, C.PRIN_DX_CD_1 
--, C.PRIN_DX_CD_2 
--, C.PRIN_DX_CD_3 
--, C.PRIN_DX_CD_4 
--, C.PRIN_DX_CD_5 
--, C.CC_LACE_SCORE 

FROM (
    SELECT PT_NO 
    , MED_REC_NO 
    , PT_NAME 
    , CASE 
     WHEN PRIN_DX_CD IN (
     443.9, 440.20 
     ) 
     THEN CAST(1 AS VARCHAR(2)) 
     END AS PRIN_DX_CD_1 

    FROM SMSDSS.BMH_PLM_PTACCT_V 
    )C 
+0

所以PRIN_DX_CD是有问题的列?您是否尝试过在比较PRIN_DX_CD列的数值之前将其转换为小数? –

+0

你是对的PRIN_DX_CD是有问题的专栏。我没有试过将它作为十进制预先输入。我现在会尝试。我只是有点困惑,因为我插入值的表也被设置为varchar。 –

+1

您只需在IN子句中的数字周围添加单引号?它试图将varchar与数字进行比较。 –

回答

1

如果它是一个VARCHAR领域,改变你在标准字符串比较:

WHEN PRIN_DX_CD IN (
    '443.9', '440.20' 
    ) 
+1

好点,你可以用另一种方式做!我只是在列上做了这个,假设一个SELECT最终可能会超过预定义的值。 –

相关问题