【问题标题】:How to convert column type from str to date when the str is of format dd/mm/yyyy?当str的格式为dd/mm/yyyy时,如何将列类型从str转换为日期?
【发布时间】:2016-08-19 05:04:38
【问题描述】:

我在从大型 csv 文件导入的 sql 中有一个大表。

当列包含格式为 dd/mm/yyyy 的日期信息时,它被识别为 str。

我试过select TO_DATE('12/31/2015') as date 但这不起作用,因为 TO_DATE 函数需要 yyyy-mm-dd 格式。

如何在 sql 中将 '12/31/2015' 字符串重新排列为 '2015-12-31' 格式,以便将列类型转换为日期?

我在 sparkSQL(在 databricks 环境中)上执行此操作,因为数据量非常大,似乎不支持 sql 的 update 关键字。

【问题讨论】:

    标签: sql date apache-spark-sql spark-csv databricks


    【解决方案1】:

    只需重新阅读您的问题;

    我建议这样做:

    UPDATE table
    SET column = Convert(varchar(10), Convert(smalldatetime, column, 103), 120)
    

    这会将列值转换为 smalldatetime,使用英国格式 (dd/mm/yyyy),然后将其转换回 varchar,使用 120 格式 (yyyy-mm-dd); 120 格式包含时间信息,但这将被截断,因为它被转换为 varchar(10);

    测试一下:

    SELECT Convert(varchar(10), Convert(smalldatetime, column, 103), 120)
    FROM table
    

    【讨论】:

    • 谢谢。这不是一个公平的问题,因为我之前没有说清楚。在 sparkSQL 中似乎不支持更新命令。 (我可能是错的)在这种情况下有什么建议吗?
    • 我刚刚尝试了测试语句并得到以下错误: SQL 语句中的错误:AnalysisException: cannot identify input near 'varchar' '(' '10' in function specification; line 1 pos 15跨度>
    • 你好 Semihcan,我已经试过我在电脑上写的语句,没有问题,所以我猜这是一个平台兼容性问题;我检查了您的标签并看到您在我使用直接 SQL 时使用了 apache-spark-sql;抱歉,我可能无法提供更多帮助。
    【解决方案2】:

    以下链接答案有效 https://forums.databricks.com/answers/12121/view.html

    df.withColumn("tx_date", to_date(unix_timestamp($"date", "M/dd/yyyy").cast("timestamp")))

    【讨论】:

      猜你喜欢
      • 2020-03-07
      • 2022-01-25
      • 1970-01-01
      • 2023-03-15
      • 2017-06-24
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多