字符串到日期格式转换导致 NULL - Databricks

Posted

技术标签:

【中文标题】字符串到日期格式转换导致 NULL - Databricks【英文标题】:String to Date Format Conversion resulting in NULL - Databricks 【发布时间】:2021-05-10 11:18:43 【问题描述】:

我已按以下格式保存日期:

+-------------------------+
| timex    (varchar)      |
+-------------------------+
| 20200303                |
+-------------------------+

我希望在 Databricks SQL 中将值输出/转换为日期/时间格式。

应该是:

+-------------------------+
| timex                   |
+-------------------------+
| 2020-03-03 00:00:00.000 |
+-------------------------+

试过了:

    select to_timestamp(timex) --> 结果为 1970-xx-xx select to_timestamp(timex, 'yyyy/MM/dd HH:mm:ss.ssssss') --> 表示参数 1 中的数据类型应该是字符串或日期 select to_timestamp(CAST(timex AS STRING), 'yyyy/MM/dd HH:mm:ss.ssssss') --> 空 select to_date(timex) --> 空

SQL 中的等价物 - convert(datetime,cast(timex as nvarchar),103)

如果我使用 cast(timex as string) as xx --> 它可以工作 但是,我使用 to_timestamp(cast(timex as string), 'yyyyMMdd') as t --> 它给出了 null。

我也尝试将字符串格式化为 to_timestamp(format_string('%8d',cast(timex as string)), 'yyyyMMdd') --> 出现异常:IllegalFormatConversionException

【问题讨论】:

【参考方案1】:

您需要使用to_timestamp 转换为时间戳,然后使用date_format 转换为所需的格式:

select date_format(to_timestamp(format_string('%8d', timex), 'yyyyMMdd'), 'yyyy-MM-dd HH:mm:ss.SSS')
from mytable;

【讨论】:

不,这也是在 Databricks 中给出 NULL。 timex 可能是一个整数。尝试先转换为字符串。请参阅编辑后的答案。 我试过这个 - date_format(to_timestamp(CAST(timex AS STRING), 'yyyyMMdd'), 'yyyy-MM-dd HH:mm:ss.SSS') as xyz 。还是给NULL 你能显示select cast(timex as string)的结果吗? 你也能显示select date_format(to_timestamp('20200303', 'yyyyMMdd'), 'yyyy-MM-dd HH:mm:ss.SSS')的结果吗?

以上是关于字符串到日期格式转换导致 NULL - Databricks的主要内容,如果未能解决你的问题,请参考以下文章

将 DatePicker 日期转换为 UTC 格式返回 NULL

如何使用pyspark函数处理日期格式的T和Z

C# null 如何转换为字符串类型

sqlserver 日期表的问题。

Impala 日期到字符串的转换

常用的字符串转换日期格式