当前位置: 首页 > 知识库问答 >
问题:

ORA-00932转换和格式化日期和字符串以计算日期范围

佴涵蓄
2023-03-14

我有一个表,其中日期字段是VARCHAR2类型(20字节),日期字段是日期类型。

日期一的输出为2019年1月29日20:22:08,日期二的输出为2019年1月25日。

我需要根据这两个字段之间的天数间隔计算记录,但我遇到了这个错误:

select field1,field2,field3 
from mytable
where 
trunc(to_date(DATE_ONE, 'DD-MM-YYYY HH24:MI:SS')) - trunc(to_date(DATE_TWO 'DD-MM-YYYY')) > interval '15' day;

ORA-00932:不一致的数据类型:预期的数字,得到间隔天到第二00932. 00000-"不一致的数据类型:预期%s得到%s"

如何修复此错误?

共有1个答案

武元白
2023-03-14

减去两个日期的结果是天数,这与减去两个时间戳的结果不同,后者是一个间隔。您当前正在尝试将减法得到的数字与固定间隔进行比较——这就是错误所说的。数据类型不匹配,无法隐式转换以进行比较。

您可以将该数字转换为间隔:

select field1,field2,field3
from mytable
where (trunc(to_date(DATE_ONE, 'DD-MM-YYYY HH24:MI:SS')) - trunc(DATE_TWO)) * interval '1' day > interval '15' day;

或者更简单地与数字15相比:

select field1,field2,field3
from mytable
where trunc(to_date(DATE_ONE, 'DD-MM-YYYY HH24:MI:SS')) - trunc(DATE_TWO) > 15;

db

我已将trunc(to_date(DATE_TWO,'DD-MM-YYYY'))更改为简单的trunc(DATE_TWO)。因为DATE_TWO已经是一个日期,所以当您执行to_date(DATE_TWO,'DD-MM-YYYY')时,您将使用会话的NLS_DATE_FORMAT设置(似乎是DD-MON-RR)将日期隐式转换为字符串,然后将该字符串转换回日期。除了浪费精力之外,如果在具有不同设置的会话中运行,这可能会中断。您只需要截断已经拥有的日期。

 类似资料:
  • 问题内容: 我正在使用代码将字符串格式化为日期 但是,如何将日期从格式转换为格式? 问题答案: 使用SimpleDateFormat#format(Date):

  • 我在presto上,把日期格式化为varchar,看起来像- 我如何转换这个?

  • 问题内容: 我想要这种格式 问题答案: 您需要先 解析 日期字符串(使用方法),才能 使用与格式匹配的格式获取对象。 然后使用所需的格式来 格式化 Date对象(Use 方法)以获取字符串。 输出:- 第一种格式是RFC 822 TimeZone与您的日期字符串匹配。有关在日期格式中使用的其他各种选项,请参见。

  • 我需要将一些字符串日期转换为另一种格式的字符串日期 我想按照“yyyy-MM-dd'T'HH:MM:ss.SSSXX”模式获得ISO-8601格式的结果日期字符串 你能帮我实现这个吗?

  • 问题内容: string : 2014-04-25 17:03:13 使用SimpleDateFormat足以格式化吗?否则我将转向任何新的API? 我的预期结果是(印度区域): 问题答案: 记住对象没有固有的格式,您需要两个对象来产生想要的结果-一个要解析,另一个要格式化: 输出: 请注意,在格式中使用带引号的序列(例如),它被视为格式模式中的文字。

  • 我有一个格式化的字符串日期 2020/04/16 (年/月/日) 我想把这个字符串解析成日期时间 显然不起作用,没有正确的日期格式。 有人知道把这个字符串解析成日期时间的最好方法是什么吗?