案例空白多个条件

时间:2016-10-06 20:46:39

标签: sql sql-server if-statement case

任何人都可以在这里指导我正确的方向。我收到一个大文本文件,其中有多行看起来像乱码。例如,以下是其中一行:

DETDD20160100388530007400000015768652700000000074433902        00000162667905028000000200020160229011750490157     1606056379591109995050                  435601530A          H19618010000000000{0000013962{0000013962{000000201601D142 

现在我的工作是使用一个调用存储过程的SSIS包来理解这个并最终将它放入一个excel电子表格中。这些长行字符以5个字母开头,我用它来确定最终输出。我有一个指南告诉我哪些字符构成了每列中的数据,但我需要有关代码的帮助。这是我到目前为止所得到的。

Select *
insert into [dbo].[ContractDisputeResolution]
Case WHEN SUBSTRING(col001, 1,5) = 'DETDD'
     THEN (SUBSTRING(col001, 6,6) as Current_Reporting_Period,
          SUBSTRING(col001, 12,7) as Sequence_Number,
          SUBSTRING(col001, 19,8) as DDPS_System_Date,
          SUBSTRING(col001, 27,32) as DDPS_System_Time,
          SUBSTRING(col001, 33,37) as File_ID_,
          SUBSTRING(col001, 38,42) as Sub_Contract_No,
          SUBSTRING(col001, 43-250) as Filler)
END
FROM [dbo].[ContractDisputeResolutionSTAGING]

----------------------------------------------------------

Select *
insert into [dbo].[ContractDisputeResolution]
Case WHEN SUBSTRING(col001, 1,5) = 'TAMPT'
(insert more rules here)

我收到了各种语法错误,并且不知道我是否应该使用Case语句。任何人都可以帮助我把它设置得更好或者指出我正确的方向吗?

谢谢, 格雷格

1 个答案:

答案 0 :(得分:2)

这不是有效的SQL:

Select *
insert into [dbo].[ContractDisputeResolution]

只需删除Select *即可。我建议您列出insert

的列

然后case也错了。我想你打算:

insert into [dbo].[ContractDisputeResolution](Current_Reporting_Period, Sequence_Number, DDPS_System_Date, DDPS_System_Time, DDPS_System_Time, Sub_Contract_No, Filler)
    select SUBSTRING(col001, 6, 6) as Current_Reporting_Period,
           SUBSTRING(col001, 12, 7) as Sequence_Number,
           SUBSTRING(col001, 19, 8) as DDPS_System_Date,
           SUBSTRING(col001, 27, 32) as DDPS_System_Time,
           SUBSTRING(col001, 33, 37) as DDPS_System_Time,
           SUBSTRING(col001, 38, 42) as Sub_Contract_No,
           SUBSTRING(col001, 43, 250) as Filler
    FROM [dbo].[ContractDisputeResolutionSTAGING]
    WHERE SUBSTRING(col001, 1, 5) = 'DETDD';

我根据列别名猜测真实表中的列名是什么。