oracle - 将日期转换为字符串的问题
问题描述
我正在尝试更新查询,以重新格式化日期时间字段的输出方式,以便它可以在不同的系统中使用。我觉得我已经研究并尝试了许多潜在的解决方案,但是在尝试执行查询时它们仍然会导致错误。
我的数据看起来有格式'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
我觉得这应该很简单,但解决方案正在逃避我。我觉得我已经查看了很多不同的信息,并且尝试的不仅仅是我上面的内容,但我无法提出一个可行的解决方案。
感谢您的任何帮助。
解决方案
看来您所谓的“日期”实际上是字符串(可能是varchar2
数据类型)。
如果是这样,首先您必须将它们转换为to_date
具有当前格式模型的日期,然后将生成的日期转换回具有所需格式模型的字符串。像这样的东西:
select to_char( to_date(DateTime_Col, 'yyyymmdd hh24:mi:ss')
, 'yyyy-mm-dd hh24:mi:ss' )
........
在您的示例中,向现有字符串添加破折号也很容易(因为这是唯一的更改),但是我刚刚向您展示的解决方案更加通用并且具有另一个优点:如果输入字符串之一实际上是不是一个有效的日期,查询会通过抛出一个错误来告诉你。如果您只使用字符串操作,您可能会错过这些实例。
推荐阅读
- docker - 文件系统上的 Docker 映像
- informatica-powercenter - 在开始工作流之前是否总是需要在 Informatica 中创建目标数据库表?
- c++ - c++ 复制构造函数和析构函数
- php - 自动完成字头不起作用
- python - Python 将此 utf8 字符串转换为 latin1
- ios - Bootstrap 4 选项卡在 iOS 上无法使用“data-target”而不是“href”属性
- android - 在活动过渡之间,使背景固定
- angularjs - angular.module(...).provider(...).info 不是函数
- asp.net - 将 web.config 文件存储在不同的文件夹中
- android - 在 ListView 适配器中初始化空的 EditText