我正在使用SSIS包导入基本文本文件,它有3个日期字段,有时某些日期字段为空。
导入的表显示空字段,我想因为它们是varchar(50)数据类型。但是我需要将那些表中的记录插入到另一个表中,其中这些列被定义为Date数据类型。
当我运行insert语句时,目标表中的结果值都显示日期的 1900-01-01 ,而不是 NULL 或空白。我尝试将值强制为null,但它不起作用:
File::Temp
如何使Date列只接受空值或空值?
答案 0 :(得分:2)
如果为'empty',则不应将varchar字段转换为或转换为日期。当空白或空字符串转换为日期时,它等于'1900-01-01'。您可以使用以下算法对此进行测试:
SELECT CAST('' as date)
使用SSIS最好检查varchar(50)字段是否等于'',如果是,则将其设置为NULL。这是一个示例SQL查询:
SELECT CASE WHEN importedfield = '' THEN NULL
ELSE CAST(importedfield as date)
END AS [NewFieldname]
答案 1 :(得分:1)
尝试使用以下表达式在数据流任务中添加派生列转换,问题可能是由空字符串(非NULL值)引起的
如果输入的类型为Date:
ISNULL([DateColumn]) ? NULL(DT_DATE) : (DT_DATE)[DateColumn]
如果输入列的类型为 string
(ISNULL([DateColumn]) || [DateColumn] == "") ? NULL(DT_DATE) : (DT_DATE)[DateColumn]
并将此列映射到目标列
答案 2 :(得分:0)
答案 3 :(得分:0)
也许它不是你输入的空值,而是一个空字符串。你提到他们可能
VARCHAR(50)
数据类型。所以你可能需要添加一些逻辑。试试这个:
NULLIF(LTRIM(RTRIM(refresh_date)),'')