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

Posted

技术标签:

【中文标题】如何将 varchar(2020 年 1 月 1 日)中的日期转换为 DB2 sql 中的日期类型?【英文标题】:How do i convert a date in varchar (1-Jan-2020) to date type in DB2 sql? 【发布时间】:2021-01-01 04:24:30 【问题描述】:

我的 db2 表中有一个日期列如下。

4-Jan-2020
7-Sep-2020
7-Dec-2020

我想把它们转换成

2020-01-04
2020-09-07
2020-12-07

分别。我如何实现这一目标? 谢谢。

【问题讨论】:

您的列数据类型是日期吗? 不,它是 varchar 【参考方案1】:

在最新版本的 DB2 上,使用TO_DATE

SELECT DATE(TO_DATE(date_col, 'DD-MON-YYYY'))
FROM yourTable;

数据:

WITH yourTable AS (
    SELECT '4-Jan-2020' AS date_col UNION ALL
    SELECT '7-Sep-2020' UNION ALL
    SELECT '7-Dec-2020'
)

【讨论】:

DATE() 相当多余。 @GordonLinoff 有趣的是,如果你在这个网站上寻找类似的问题,许多被接受的答案似乎都包含了对TO_DATE 的调用,而另一个转换为DATE()。不知道他们为什么这样做。 令人困惑的是,TO_DATE 在 Db2 中不返回 DATE,而是返回 TIMESTAMP,因此将结果转换为日期通常是个好主意。这种奇怪的原因是(我相信)TO_DATE 作为其 Oracle 兼容性的一部分进入 Db2,并且 Oracle 中的 TO_DATE 返回一个日期+时间数据类型(Oracle 非常混乱地命名为 DATE docs.oracle.com/cd/B28359_01/server.111/b28318/…) 我的专栏中有一些垃圾字符串,这是错误的。我如何将它们转换为 NULL 并保持最新状态? 使用:CASE WHEN REGEXP_LIKE(date_col, '[0-9]1,2-[A-Z]3-[0-9]4') THEN DATE(TO_DATE(date_col, 'DD-MON-YYYY')) END

以上是关于如何将 varchar(2020 年 1 月 1 日)中的日期转换为 DB2 sql 中的日期类型?的主要内容,如果未能解决你的问题,请参考以下文章

Python中如何将2000年1月1日至2020年12月31号,每一天的日期信息都打印出来?Python编程?

如何在 SQL Server中 将日期格式化

python如何求2020年第19周起止日期: 2020年第19周(5月4日-5月10日)?

linq 里按月查询汇总

2020年基金和股票

SQLServer数据库查询时间段如2013-1-1到2013-12-31出现2-9月数据漏掉,将其排序发现1月中间嵌入11月数据