不一致的数据类型:预期的 DATE 得到了 NUMBER
Posted
技术标签:
【中文标题】不一致的数据类型:预期的 DATE 得到了 NUMBER【英文标题】:Inconsistent Datatypes: Expected DATE got NUMBER 【发布时间】:2018-11-05 18:23:38 【问题描述】:我正在尝试添加一个 Where 子句,该子句仅从该特定日期获取数据 (trunc(hr, 'dd')) 但是当我输入 HR 的示例值时(类型:DATE WITH TIME ZONE)我收到以下错误:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER
以下是 HR Column 的一些示例数据:
**HR**
25-DEC-16 12.00.00.000000000 AM AMERICA/NEW_YORK
30-DEC-16 06.00.00.000000000 AM US/EASTERN
以下是我的(示例)查询:
select *
from value v
where trunc(v.hr, 'dd') =
trunc('01-DEC-16 12.00.00.000000000 AM AMERICA/NEW_YORK', 'dd')
and v.code = 'DEFAULT';
我需要转换一些东西吗?我尝试使用 TO_DATE 函数,但我认为没有适合我的示例数据的日期格式...
提前致谢!
【问题讨论】:
您在字符串上使用 TRUNC(),它需要 DATE 或 TIMESTAMP。 Oracle 中没有数据类型DATE WITH TIMESTAMP
。 DATE
或 TIMESTAMP
。你用TO_DATE
做了什么尝试——这就是你必须使用的! TRUNC
上的字符串值不存在。
@WernfriedDomscheit 抱歉,我指的是时区。我要修改我原来的问题
TO_TIMESTAMP('代表时间戳的字符串','描述时间戳字符串的格式字符串')。如:TO_TIMESTAMP('01-DEC-16 12.00.00.000000000 am','dd-MON-YY hh.mi.ss.ff9 am')
看起来 -5 让你回到纽约,所以:TO_TIMESTAMP_TZ('01-DEC-16 12.00.00.000000000 am -5','dd-MON-YY hh.mi.ss.ff9我是 tzh')
【参考方案1】:
您的 WHERE 条件存在几个问题。
TRUNC(..., 'DD')
返回一个DATE
值,即您丢失所有时区信息。
我会用这个
WHERE TRUNC(SYS_EXTRACT_UTC(hr)) = TRUNC(SYS_EXTRACT_UTC(TIMESTAMP '2016-12-01 12:00:00 AMERICA/NEW_YORK'))
注意,您可以跳过DD
,因为它是默认设置。
【讨论】:
什么时候需要四舍五入到最近的周、月、年等? 然后使用TRUNC
和'IW', 'MM', 'YYYY'
- 或阅读documentation。
哦,很抱歉造成混乱 :( ,我知道那部分(我可以用 google har har,我知道如何将日期截断/舍入到最近的年、月、周等),但是当我提取日期,是否像这样做一样简单?TRUNC(SYS_EXTRACT_UTC(hr),'yyyy')?还是我必须在之前/之后进行一些数据转换?(如果这有意义的话)似乎有点太“容易”了,哈哈。以上是关于不一致的数据类型:预期的 DATE 得到了 NUMBER的主要内容,如果未能解决你的问题,请参考以下文章
java.sql.SQLException:ORA-00932:不一致的数据类型:预期 DATE 在插入 Null 时间戳时得到 BINARY
ORA-00932: 不一致的数据类型: 预期 - 得到 CLOB - 在 regexp_substr 函数中使用 clob
如何修复 PL/SQL:ORA-00932:不一致的数据类型:预期的 CLOB 得到了 -