首页 > 解决方案 > 将日期转换为字符串的问题

问题描述

我正在尝试更新查询,以重新格式化日期时间字段的输出方式,以便它可以在不同的系统中使用。我觉得我已经研究并尝试了许多潜在的解决方案,但是在尝试执行查询时它们仍然会导致错误。

我的数据看起来有格式'YYYYMMDD HH24:MI:SS'。我想将该字段重新格式化为'YYYY-MM-DD HH24:MI:SS'.

数据示例:

20171122 11:16:42
20171121 15:28:48
20171117 12:49:44
20171121 16:25:30
20171121 15:23:02
20171122 10:10:27
20180214 17:49:41
20180223 13:51:54
20180612 17:45:52
20180628 14:25:41
20180214 13:31:19
20190328 14:32:39
20190319 11:43:25
20190321 13:11:03
20190319 10:24:29
20190321 13:11:25
20190319 10:21:11

我试过 to_char(DateTime_Col,'YYYY-MM-DD HH24:MI:SS')在我的声明中使用。这样做时,我收到以下错误。

ORA-01722: invalid number
01722. 00000 -  "invalid number"
*Cause:    The specified number was invalid.
*Action:   Specify a valid number.

我也尝试过使用to_date(to_char(DateTime_Col),'YYYY-MM-DD HH24:MI:SS')or justto_date(DateTime_Col,'YYYY-MM-DD HH24:MI:SS')并从这两者中得到以下信息。

ORA-00932: inconsistent datatypes: expected CHAR got DATE
00932. 00000 -  "inconsistent datatypes: expected %s got %s"
*Cause:    
*Action:
Error at Line: 4 Column: 22

我觉得这应该很简单,但解决方案正在逃避我。我觉得我已经查看了很多不同的信息,并且尝试的不仅仅是我上面的内容,但我无法提出一个可行的解决方案。

感谢您的任何帮助。

标签: oracle

解决方案


看来您所谓的“日期”实际上是字符串(可能是varchar2数据类型)。

如果是这样,首先您必须将它们转换为to_date具有当前格式模型的日期,然后将生成的日期转换回具有所需格式模型的字符串。像这样的东西:

select to_char( to_date(DateTime_Col, 'yyyymmdd hh24:mi:ss')
              , 'yyyy-mm-dd hh24:mi:ss' )
........

在您的示例中,向现有字符串添加破折号也很容易(因为这是唯一的更改),但是我刚刚向您展示的解决方案更加通用并且具有另一个优点:如果输入字符串之一实际上是不是一个有效的日期,查询会通过抛出一个错误来告诉你。如果您只使用字符串操作,您可能会错过这些实例。


推荐阅读