当str的格式为dd/mm/yyyy时,如何将列类型从str转换为日期?

Posted

技术标签:

【中文标题】当str的格式为dd/mm/yyyy时,如何将列类型从str转换为日期?【英文标题】:How to convert column type from str to date when the str is of format dd/mm/yyyy? 【发布时间】: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 关键字。

【问题讨论】:

【参考方案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")))

【讨论】:

以上是关于当str的格式为dd/mm/yyyy时,如何将列类型从str转换为日期?的主要内容,如果未能解决你的问题,请参考以下文章

SSIS输出日期为DD / MM / YYYY 00:00:00

将日期格式更改为 yyyy-mm-dd

如何强制输入日期格式为 dd/mm/yyyy? [复制]

转换为日期格式 dd/mm/yyyy

将日期 javascript 从 yyyy/mm/dd 反转为 dd/mm/yyyy

SSRS 2008 R2-格式参数为DD / MM / YYYY