当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