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

ADF从SQL Server拉取数据时datetime带T/Z如何转为常规格式

问题背景

执行SQL Server查询获取日期字段最大值:

select CONVERT(SMALLDATETIME, max(Date_U)) as Max_Date_U
  FROM [MDM].[C_CARD_RAWDATA]
  • 直接在SQL Server环境执行返回结果:2022-03-22 15:51:00
  • 通过ADF拉取结果赋值给变量时,获取到的值为:2022-03-22T15:51:00Z
    需要将带T、Z标识的日期值转换为无特殊字母的常规datetime格式。
原因说明

ADF默认会将日期类型值序列化为ISO 8601标准格式:T是日期与时间的法定分隔符,Z标识该时间为UTC零时区时间,属于数据传输层的标准序列化行为,不是数据精度或内容错误。

可行解决方案

1. ADF侧格式化(推荐,不侵入原有SQL逻辑)

使用ADF内置的formatDateTime函数直接对变量做格式化输出:

@formatDateTime(variables('你的存储日期的变量名'), 'yyyy-MM-dd HH:mm:ss')

如果业务使用东八区等非UTC时区,先做时区转换再格式化,避免时间差问题:

@formatDateTime(convertFromUtc(variables('你的存储日期的变量名'), 'China Standard Time'), 'yyyy-MM-dd HH:mm:ss')

执行后直接输出2022-03-22 15:51:00格式的结果。

2. SQL侧直接返回固定格式字符串

修改查询语句,在SQL端直接将日期转为固定格式的字符串返回,从源头避免ADF的日期序列化逻辑:

select CONVERT(VARCHAR(19), max(Date_U), 120) as Max_Date_U
  FROM [MDM].[C_CARD_RAWDATA]

SQL Server的格式编码120对应的输出规则就是yyyy-MM-dd HH:mm:ss,返回结果为字符串类型,ADF拉取时不会做额外格式转换,直接拿到目标格式值。

3. 字符串替换法(适配固定格式场景)

如果确认拉取到的日期格式固定为yyyy-MM-ddTHH:mm:ssZ,可以直接替换掉特殊字符得到目标格式:

@replace(replace(variables('你的存储日期的变量名'), 'T', ' '), 'Z', '')

该方法实现简单,但如果日期值带毫秒、时区偏移后缀时容易出现格式错误,仅适合格式完全固定的场景使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.08 16:15:17