gpt4 book ai didi

sql-server - 如何将平面文件中的字符串 "NULL"转换为 DATETIME 或 DATETIME2?

转载 作者:行者123 更新时间:2023-12-01 04:45:05 26 4
gpt4 key购买 nike

tl;博士 :如何将平面文件中的“NULL”转换为 SSDT/SSIS 中的 NULL?

在 SSMS 中运行此代码:

/* Run once
SET NOCOUNT ON
CREATE TABLE #source (DT DATETIME, DT2 DATETIME2)
CREATE TABLE #target (DT DATETIME, DT2 DATETIME2)
INSERT INTO #source
VALUES (GETDATE(),GETDATE()),(NULL,NULL),(GETDATE(),'9999-12-31 23:59:59')
*/
-- Cntl-Shift-F, results to CSV with headers
SELECT * FROM #source

-- Cntl-D, results to grid
INSERT INTO #target
SELECT * FROM #source
SELECT * FROM #target

-- Prep for next run
TRUNCATE TABLE #target

配置 SSMS 以将结果创建为带有标题的 CSV 文件:工具 --> 选项 --> 查询结果 --> SQL Server --> 结果到文本:逗号分隔下拉列表,选中在结果集中包含列标题。

您的输出将类似于:
DT,DT2
2017-11-16 10:09:31.997,2017-11-16 10:09:31.9970000
NULL,NULL
2017-11-16 10:09:31.997,9999-12-31 23:59:59.0000000

在SSDT中,配置一个平面文件连接,Advanced“tab”,将列类型设置为DT_DBTIMESTAMP for DT,DT_DBTIMESTAMP2 for DT2。

(附带问题:知道为什么 SSDT 总是出错,并将两列都设置为 DT_DATE?很明显,这些列有一个时间分量。)

在平面文件源中,配置 RetainNulls = True (虽然我认为这无关紧要,因为我没有真正的空值,即不包含任何数据的空白列。

如何让 SSDT 在 #target 中创建与我在 SSMS 中获得的结果相同的结果? IOW,我需要将文本“NULL”转换为目标中的“正确”NULL。

我的偏好:
  • 平面文件连接和/或平面文件源中的配置技巧,
  • 派生列(我需要派生方面的帮助),
  • 脚本组件。
  • 最佳答案

    您需要将列作为字符串(例如,[DT_STR])拉入平面文件源,然后使用派生列转换和以下表达式转换它们:

    DT 的表达式:

    DT == "NULL" ? NULL(DT_DBTIMESTAMP) : (DT_DBTIMESTAMP) DT

    DT2 的表达式:
    DT2 == "NULL" ? NULL(DT_DBTIMESTAMP2, 7) : (DT_DBTIMESTAMP2, 7) DT2

    关于sql-server - 如何将平面文件中的字符串 "NULL"转换为 DATETIME 或 DATETIME2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47319143/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com