Azure 数据工厂 - 数据流表达式日期和时间戳转换

问题描述 投票:0回答:1

使用派生列,我添加 3 列 -> 2 列用于日期,1 列用于时间戳。对于日期列,我传递一个字符串作为参数。例如:21-11-2021 和 timstamp 我正在使用 currenttimestamp 函数。

我在派生列中编写了表达式,将它们转换为日期和时间戳数据类型,并且还采用目标表需要的格式,分别为 dd-MM-yyyy 和 dd-MM-yyyy HH:mm:ss

对于日期->

使用的表达式:toDate($initialdate, 'dd-MM-yyyy')

数据预览输出:2021-01-21 --(不是我想要的格式)

pipline 调试运行后,目标 DB(Azure sql 数据库)列中的值: 2021-01-21T00:00:00 -- 在表中显示如下我不明白为什么

对于 Timstamp 转换:

所用表达:

toTimestamp(toString(currentTimestamp(), 'dd-MM-yyyy HH:mm:ss', '欧洲/阿姆斯特丹'), 'dd-MM-yyyy HH:mm:ss')

数据预览输出:2021-11-17 19:37:04 -- 不是我想要的格式

pipline 调试运行后,目标 DB(Azure sql 数据库)列中的值: 2021-11-17T19:37:04:932 - 在表中显示如下我不明白为什么

问题 1:我没有获取目标所需格式的值???并且它应该仅分别为 DATE 和 Datetime2 数据类型,因此没有字符串转换

问题2:调试运行后我不知道为什么插入后表值看起来与数据预览不同???

Kinldy 让我知道我是否写了任何错误的表达方式??

--抱歉我无法发布图片---

azure-data-factory date-format
1个回答
0
投票
  1. toDate() 将输入日期字符串转换为日期,默认格式为 yyyy-[M]M-[d]d。 可接受的格式为:[ yyyy、yyyy-[M]M、yyyy-[M]M-[d]d、yyyy-[M]M-[d]dT* ]。

    toTimestamp() 相同,使用时默认模式为 yyyy-[M]M-[d]d hh:mm:ss[.f...]。

  2. Azure SQL Database
    中,默认的 datedatetime2 格式为 YYYY-MM-DD 和 YYYY-MM-DD HH:mm:ss,如下所示。

  1. 但是,如果您的列数据类型采用字符串 (varchar) 格式,那么您可以更改 azure 数据流映射中
    date
    DateTime
    的输出格式。

加载到Azure SQL数据库后,如下图:

注意:当数据类型为varchar时会出现此格式

  1. 如果数据类型是Azure SQL数据库中的日期,您可以使用日期转换将它们转换为所需的格式

select id, col1, date1, convert(varchar(10),date1,105) as 'dd-MM-YYYY' from test1

  1. Azure SQL 数据库始终遵循 UTC 时区。使用“AT TIME ZONE”将其转换为另一个非 UTC 时区。

select getdate() as a, getdate() AT TIME ZONE 'UTC' AT TIME ZONE 'Central Standard Time' as b

您也可以参考sys.time_zone_info视图来查看当前UTC偏移信息。

select * from sys.time_zone_info

© www.soinside.com 2019 - 2024. All rights reserved.