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

Posted

技术标签:

【中文标题】Azure 数据工厂 - 数据流表达式日期和时间戳转换【英文标题】:Azure Data factory - data flow expression date and timestamp conversions 【发布时间】:2021-11-17 11:59:16 【问题描述】:

使用派生列,我添加 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 --(不是我想要的格式)

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

对于时间戳转换:

使用的表达式:

toTimestamp(toString(currentTimestamp(), 'dd-MM-yyyy HH:mm:ss', 'Europe/Amsterdam'), 'dd-MM-yyyy HH:mm:ss')

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

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

问题 1:我没有得到目标所需格式的值???它应该分别只在 DATE 和 Datetime2 数据类型中,所以没有字符串转换

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

Kinldy 让我知道我是否写错了表达方式??

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

【问题讨论】:

您遇到的错误是什么?可以分享一下吗 我认为您不需要将其转换为特定格式的字符串,然后再将其沉入目标列。只要您的 toDate 为您返回正确的日期字段,您就可以继续使用 嗨@AllAboutBI 感谢您的回复。我已经用我执行的步骤重写了我的问题,请检查。 嗨@ray 感谢您的回复。我现在已经用我执行的步骤重写了我的问题,请检查。 您好,在 Azure SQL 数据库中,默认情况下,日期和日期时间以 UTC 格式存储。您必须从 SQL 端进行适当的转换。 【参考方案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...]。

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

    但如果您的列数据类型是字符串 (varchar) 格式,那么您可以在 Azure 数据流映射中更改 dateDateTime 的输出格式。

加载到Azure SQL数据库时,如下图所示:

注意:当数据类型为 varchar 时会产生这种格式

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

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

    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

【讨论】:

以上是关于Azure 数据工厂 - 数据流表达式日期和时间戳转换的主要内容,如果未能解决你的问题,请参考以下文章

将时间戳传递给 azure 映射数据流

Azure 数据工厂:如何从数据流转换中的流中获取第一行

将日期时间参数从管道传递到数据流源存储过程 Azure 数据工厂

为 Azure 数据流中的文件动态添加时间戳

将最新的文件夹从 azure blob 存储加载到 azure 数据工厂

在映射数据流(Azure 数据工厂)内的表达式函数中创建动态 Json