如何将存储为 VARCHAR2 的日期转换为 'MM/DD/YYYY HH24:MI:SS'?

Posted

技术标签:

【中文标题】如何将存储为 VARCHAR2 的日期转换为 \'MM/DD/YYYY HH24:MI:SS\'?【英文标题】:How to convert date stored as VARCHAR2 to 'MM/DD/YYYY HH24:MI:SS'?如何将存储为 VARCHAR2 的日期转换为 'MM/DD/YYYY HH24:MI:SS'? 【发布时间】:2016-05-10 17:53:03 【问题描述】:

我希望将日期(存储为 varchar2)例如:4/19/2016 6:42 转换为这种日期格式 MM/DD/YYYY HH24:MI:SS

源字段数据类型 - varchar2

目标字段数据类型 - date

源值 - 4/19/2016 6:42

预期值 - 04/19/2016 06:42:00

有人可以为此使用 Oracle (SQL) 命令吗? SQL 代码比 PL/SQL 更受青睐,但任何方法都可以。

【问题讨论】:

如果目标字段是 DATE 列,那么它没有固有格式,因此您只是转换为日期,而不是另一个格式化的字符串。您的字符串格式是否一致? MM/DD 总是这样,你没有月份名称,从来没有 AM/PM 标记,小时部分总是 24 小时格式,等等? OP 表示数据类型(而不是格式)- varchar2 和 date 是数据类型。我将进行编辑以澄清。 【参考方案1】:

你应该先转换成日期,然后转换成字符

 SELECT TO_CHAR(TO_DATE(your_var_char_date,'MM/DD/YYYY  HH24:MI:SS'), 'MM/DD/YYYY  HH24:MI:SS') 
 FROM  your_table;

显然,如果有必要,只应使用转换为日期

SELECT TO_DATE(your_var_char_date,'MM/DD/YYYY  HH24:MI:SS')
FROM  your_table;

【讨论】:

这将转换回字符串数据类型。 OP想要转换为日期。解决方案在您的答案中,但包含在不需要的 to_char 中。应该只是to_date(... ' ... HH24:MI:SS') 感谢@scaisEdge!这很有帮助。我试图以另一种方式来做 - to_date(to_char(, ''), '') 您需要清楚地记住 to_char 将 DATE 或 NUMBER 作为其输入。如果您向其提供字符串(char 或 varchar),则必须尝试隐式转换为正确的输入数据类型。与 to_date 相同。它需要一个 varchar 作为输入。如果您为其提供 DATE,则它必须首先进行隐式转换,如果您以交互方式执行此操作,它还必须将结果 DATE 隐式转换回字符串以在屏幕上显示。而隐式转换(任一方向)最终会咬你一口。

以上是关于如何将存储为 VARCHAR2 的日期转换为 'MM/DD/YYYY HH24:MI:SS'?的主要内容,如果未能解决你的问题,请参考以下文章

Oracle VIEW - 将 VARCHAR2 转换为 DATE 并找到 DATE 的 MIN/MAX

在 unix shell 中,如何将昨天的日期转换为变量?

oracle日期字段为varchar2类型,为啥能直接比较

Varchar2 到 Date 用于 sysdate 比较

如何在 SQL 中将 varchar2 转换为数字

如何将存储为 VARCHAR 的 UTC 日期时间值转换为常规日期时间