我正在创建一个管道,其中源是csv文件,接收器是SQL Server。
CSV文件中的日期列可能具有类似的值
12/31/2020
10162018
20201017
31/12/1982
1982/12/31
我找不到检查日期格式的函数。如何检查格式并将上述值转换为yyyy-MM-dd
格式。
Himanshu Sinha msft 给出了解决方案
解决了在映射数据流的派生列中使用表达式生成器的问题。
coalesce(toDate(Somedate,'MM/dd/yyyy'),toDate(Somedate,'yyyy/MM/dd'),toDate(Somedate,'dd/MM/yyyy'),toDate(Somedate,'MMddyyyy'),toDate(Somedate,'yyyyddMM'),toDate(Somedate,'MMddyyyy'),toDate(Somedate,'yyyyMMdd'))
这个联合函数的答案实际上不会解决问题。它只是消除了错误。有很多日期有多种格式。例如:";2020年2月1日";(mm/dd/yyyy(和";2020年1月2日";(年/月/日(。前面的答案只是消除了错误,但您的下游分析将非常不正确。
您需要对哪种日期格式最适合传入流进行聚合分析,并将逻辑路由到相应的独立管道分支。
您可以在复制活动的Mapping选项卡中对此进行配置。可以指定日期时间格式,但它只支持一种格式类型。如果你有一个混合的格式,如你的例子,那么它将不起作用。
一种选择是将列作为nvarchar摄取到临时表中。然后在另一个复制活动中,使用自定义select语句来检测列格式,并根据需要强制转换日期。您应该能够使用SELECT中的CASESQL语句从暂存表中执行此操作。
仅供参考:数据类型映射
https://learn.microsoft.com/en-us/azure/data-factory/copy-activity-schema-and-type-mapping#data-类型映射