将文本日期(2020 年 3 月 21 日)转换为 dd/mm/yyyy

Posted

技术标签:

【中文标题】将文本日期(2020 年 3 月 21 日)转换为 dd/mm/yyyy【英文标题】:Convert text date (March 21st 2020) to dd/mm/yyyy 【发布时间】:2020-04-02 14:20:10 【问题描述】:

我已将 Excel 工作表导入 PowerBI,并尝试将日期列从文本格式(2020 年 3 月 21 日,00:00:000)转换为日期格式(2020 年 3 月 21 日)。

不幸的是,当我选择“检测类型”时,它只选择文本,而选择“日期”会出现错误。我已从列中删除了“, 00:00:000”,但仍收到错误消息。

有人对我如何将此列转换为 dd/mm/yyyy 有任何建议吗?

非常感谢,

【问题讨论】:

在 DAX 中还是在查询编辑器中? 【参考方案1】:

删除, 00:00:000 后,您可以使用其中一种转换来删除21st 中的st 部分,以便March 21st 2020 --> March 21 2020 可以自动转换为日期。

这种转换会去除除第一个空格之后的空格和数字之外的所有字符:

each Text.BeforeDelimiter(_, " ") & Text.Select(_, " ", "0".."9")

这个删除最后一个空格左边的两个字符:

each Text.ReplaceRange(_, Text.PositionOf(_, " ", Occurrence.Last)-2, 2, "")

完整的查询(使用第一个选项)如下所示:

let
    Source = <Your Data Source>,
    Remove00 = Table.TransformColumns(Source, "DateText", each Text.BeforeDelimiter(_, ","), type text),
    StripOrdinal = Table.TransformColumns(Remove00, "DateText", each Text.BeforeDelimiter(_," ") & Text.Select(_, " ","0".."9"), type text),
    TextToDate = Table.TransformColumnTypes(StripOrdinal,"DateText", type date)
in
    TextToDate

【讨论】:

【参考方案2】:

您可以使用此 PowerQuery 脚本:

let
    Source = Excel.Workbook(File.Contents("Dates.xlsx"), null, true),
    Sheet1_Sheet = Source[Item="Sheet1",Kind="Sheet"][Data],
    #"Changed Type" = Table.TransformColumnTypes(Sheet1_Sheet,"Column1", type text),
    #"Split Column by Delimiter" = Table.SplitColumn(#"Changed Type", "Column1", Splitter.SplitTextByDelimiter(" ", QuoteStyle.Csv), "Column1.1", "Column1.2", "Column1.3"),
    #"Added Month" = Table.AddColumn(#"Split Column by Delimiter", "Month", each if [Column1.1] = "January" then 1 else if [Column1.1] = "February" then 2 else if [Column1.1] = "March" then 3 else if [Column1.1] = "April" then 4 else if [Column1.1] = "May" then 5 else if [Column1.1] = "June" then 6 else if [Column1.1] = "July" then 7 else if [Column1.1] = "August" then 8 else if [Column1.1] = "September" then 9 else if [Column1.1] = "October" then 10 else if [Column1.1] = "November" then 11 else if [Column1.1] = "December" then 12 else 0),
    #"Added Day" = Table.AddColumn(#"Added Month", "Day", each Text.Select([Column1.2], "0".."9")),
    #"Removed Columns" = Table.RemoveColumns(#"Added Day","Column1.1", "Column1.2"),
    #"Renamed Columns" = Table.RenameColumns(#"Removed Columns","Column1.3", "Year"),
    #"Changed Type2" = Table.TransformColumnTypes(#"Renamed Columns","Year", Int64.Type, "Month", Int64.Type, "Day", Int64.Type),
    #"Inserted Merged Column" = Table.AddColumn(#"Changed Type2", "Date", each Text.Combine(Text.From([Day], "de-DE"), "/", Text.From([Month], "de-DE"), "/", Text.From([Year], "de-DE")), type text),
    #"Changed Type3" = Table.TransformColumnTypes(#"Inserted Merged Column","Date", type date),
    #"Removed Columns2" = Table.RemoveColumns(#"Changed Type3","Year", "Month", "Day")
in
    #"Removed Columns2"

转换为最终数据格式取决于您的本地设置,并且通常在 PowerQuery 之外完成。

【讨论】:

以上是关于将文本日期(2020 年 3 月 21 日)转换为 dd/mm/yyyy的主要内容,如果未能解决你的问题,请参考以下文章

如何将 varchar(2020 年 1 月 1 日)中的日期转换为 DB2 sql 中的日期类型?

如何在java中将日期转换为2016年2月26日[重复]

将 Avro 中存储为整数(自 1970 年 1 月 1 日以来的天数)的“日期”转换为雪花“日期”类型

文本文件字符串拆分然后将每个元素输出到视图表中

在excel中如何将输入的数字自动转换为日期

SQL怎么把日期格式1990-01-01转换成1990年1月1日?