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

ADF数据流中无法将特定格式字符串转换为datetime/timestamp

解决ADLS CSV字符串转Timestamp并保留高精度插入SQL的问题

核心问题分析

你的源时间字符串是带7位小数的UTC格式(2022-07-24T07:04:27.5765591Z),之前转换失败是因为格式字符串与源格式不匹配,导致解析返回NULL。以下是两种场景的正确配置:


方案1:Projection中正确配置

在ADLS CSV源的Projection设置里,将列类型设为timestamp,并把格式字符串修改为匹配7位小数的版本:

yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'
  • SSSSSSS对应源字符串里的7位微秒部分,原来的SSS仅支持3位小数,无法解析更长的小数位,因此返回NULL。

方案2:Derived Column中正确使用toTimestamp

在Derived Column里使用完全匹配的格式表达式,注意ADF中需要用两个单引号''转义单引号:

toTimestamp(DataLakeModified_DateTime, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSSS''Z''')

也可以利用时区占位符X直接匹配末尾的Z(UTC标识):

toTimestamp(DataLakeModified_DateTime, 'yyyy-MM-dd''T''HH:mm:ss.SSSSSSSX')

关键:SQL目标表的类型匹配

要确保SQL目标表的对应列类型支持7位精度,比如:

  • SQL Server/Azure SQL DB 使用 datetime2(7)
  • PostgreSQL 使用 timestamp with time zone(或timestamptz)
    只有这样才能完整保留源时间的7位小数精度,避免插入后精度丢失。

之前尝试失败的原因

  1. Projection里的格式yyyy-MM-dd'T'HH:mm:ss.SSS'Z'仅支持3位小数,无法解析源字符串的7位小数部分,导致解析失败返回NULL。
  2. Derived Column里的表达式存在格式错误:
    • %Y-%m-%dT%H:%M:%s%z 里的%s是错误占位符(应使用%S表示秒),且%z匹配±HHMM格式,不兼容末尾的Z。
    • yyyy-MM-ddTHH:mm:ss:fffffffK 里的小数部分用了冒号:,而源中是点.,格式不匹配。
    • yyyy-MM-dd HH:mm:ss.SSS 里的空格与源的T不匹配,且仅支持3位小数,导致解析失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:15:20