T-SQL从源表转换和转换问题到目标

时间:2016-10-07 12:16:52

标签: sql sql-server

我有一张表格如下:

create table dbo.##Table_A00
(
    RowNo int,
    TRANSACTION_TYPE varchar(3),
    ORGANISATION_ID numeric (10),
    FILE_TYPE varchar(3),
    CREATION_DATE datetime,
    CREATION_TIME varchar(3),
    GENERATION_NUMBER numeric (6)   
)

然而,我使用的源文件是用于捕获平面文件的表,它们可以是任何数据格式。

我在源表中拥有的数据类型如下所示:

CREATE TABLE ##Table_Alltextfiles 
(
     rowID int identity (1,1),
     [Col1] varchar(50),
     [Col2] varchar(250),
     [Col3] varchar(50),
     [Col4] varchar(50),
     [Col5] varchar(50),
     [Col6] varchar(50),
     [Col7] varchar(50)
)

我想要做的是从##Table_A00(来源)

插入##Table_Alltextfiles(目的地)所有行

但是由于数据类型不匹配,我遇到了这样的问题,并且我尝试将其转换为未成功。

我可以做些什么来将varchar的值提供给它的适当目的地,即如果它是一个日期字段,或者它是一个数字。

这就是我一直在做的事情:

insert into dbo.##Table_A00
    select 
        rowID, 
        col1, cast(col2 as numeric (10)),
        col3, cast(col4 as date), 
        col5, cast(col6 as numeric (6))
    from 
        ##Table_Alltextfiles
    where 
        col1 = 'A00'

谢谢

1 个答案:

答案 0 :(得分:1)

尝试使用以下查询。

insert into dbo.##Table_A00
    select 
        rowID, 
        SUBSTRING(col1,1,3), case when ISNUMERIC(col2)=1 THEN cast(col2 as numeric (10)) ELSE NULL END,
        SUBSTRING(col3,1,3), case when ISDATE(col4)=1 THEN  cast(col4 as datetime) ELSE NULL END, 
        SUBSTRING(col5,1,3), case when ISNUMERIC(col6)=1 THEN cast(col6 as numeric (6)) ELSE NULL END
    from 
        ##Table_Alltextfiles
    where 
        col1 = 'A00'