You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSIS派生列转换中生成UTC datetimeoffset?

SSIS派生列UTC时间时区偏移问题处理

问题描述

  • 在SSIS数据流的派生列转换中,CreatedDate和LastModifiedDate的数据类型为DT_DBTIMESTAMP
  • 使用GETUTCDATE()生成的UTC时间不带+00:00偏移量,插入SQL Server数据库时被自动附加本地时区+05:30偏移
  • 尝试在派生列转换中使用SYSDATETIMEOFFSET(),但该函数不被SSIS派生列支持

解决方案

方法1:使用脚本组件生成带偏移的UTC时间

替换派生列转换为脚本组件,在脚本中直接生成带+00:00偏移的UTC时间:

  1. 在数据流中添加脚本组件,选择“转换”类型
  2. 在脚本编辑器中,输入以下C#代码(假设输出列名为CreatedDateOffset和LastModifiedDateOffset,类型为DT_DBTIMESTAMPOFFSET):
    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        Row.CreatedDateOffset = DateTimeOffset.UtcNow;
        Row.LastModifiedDateOffset = DateTimeOffset.UtcNow;
    }
    
  3. 将脚本组件的输出列映射到目标表的datetimeoffset类型列

方法2:在SQL Server端转换时区偏移

保持SSIS派生列的GETUTCDATE()不变,在目标组件的SQL插入语句中使用SWITCHOFFSET函数转换为+00:00偏移:

INSERT INTO YourTargetTable (CreatedDate, LastModifiedDate)
VALUES 
(
    SWITCHOFFSET(CAST(? AS datetimeoffset), '+00:00'),
    SWITCHOFFSET(CAST(? AS datetimeoffset), '+00:00')
)

注:将YourTargetTable替换为实际表名,?对应SSIS数据流中的参数

方法3:派生列表达式拼接转换(不推荐)

通过字符串拼接给UTC时间添加+00:00偏移,再转换为DT_DBTIMESTAMPOFFSET类型:

(DT_DBTIMESTAMPOFFSET, 7) (GETUTCDATE() + "+00:00")

该方法依赖字符串格式的正确性,若日期格式变化可能导致转换失败,仅作为临时方案使用


内容的提问来源于stack exchange,提问作者CleanBold

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:08:17