任何人都可以在这里指导我正确的方向。我收到一个大文本文件,其中有多行看起来像乱码。例如,以下是其中一行:
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语句。任何人都可以帮助我把它设置得更好或者指出我正确的方向吗?
谢谢, 格雷格
答案 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';
我根据列别名猜测真实表中的列名是什么。