Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 不一致的数据类型:预期的日期数_Sql_Oracle - Fatal编程技术网

Sql 不一致的数据类型:预期的日期数

Sql 不一致的数据类型:预期的日期数,sql,oracle,Sql,Oracle,我试图添加一个Where子句,该子句只获取特定日期的数据(trunc(hr,'dd')),但当我输入hr的样本值(类型:带时区的日期)时,我收到以下错误: ORA-00932: inconsistent datatypes: expected DATE got NUMBER 以下是HR列的一些示例数据: **HR** 25-DEC-16 12.00.00.000000000 AM AMERICA/NEW_YORK 30-DEC-16 06.00.00.000000000 AM US/EASTE

我试图添加一个Where子句,该子句只获取特定日期的数据(trunc(hr,'dd')),但当我输入hr的样本值(类型:带时区的日期)时,我收到以下错误:

ORA-00932: inconsistent datatypes: expected DATE got NUMBER
以下是HR列的一些示例数据:

**HR**
25-DEC-16 12.00.00.000000000 AM AMERICA/NEW_YORK
30-DEC-16 06.00.00.000000000 AM US/EASTERN
以下是我的(示例)查询:

我需要转换一些东西吗?我尝试过使用TO_DATE函数,但我认为没有适合我的示例数据的日期格式


提前谢谢

在您的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
,因为这是默认设置

在您的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(),它需要日期或时间戳。Oracle中没有带时间戳的数据类型
DATE
日期
时间戳
。到目前为止,您用
尝试了什么?这就是您必须使用的<字符串值上的code>TRUNC
不存在。@WernfriedDomscheit抱歉,我是说时区。我将把我的原始问题修改为_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 am tzh')你正在使用TRUNC()它需要日期或时间戳。Oracle中没有带时间戳的数据类型
DATE
日期
时间戳
。到目前为止,您用
尝试了什么?这就是您必须使用的<字符串值上的code>TRUNC
不存在。@WernfriedDomscheit抱歉,我是说时区。我将把我的原始问题修改为_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 am tzh')当我需要四舍五入到最近的周、月、年等时怎么办?然后使用
TRUNC
'IW','MM',“YYYY”
-或者阅读。哦,很抱歉造成混淆:(,我知道这一部分(我可以用谷歌搜索har-har,我知道如何将日期精确/舍入到最接近的年、月、周等),但是当我提取日期时,是否像这样简单地舍入?trunc(SYS\u extract\u UTC(hr),“YYYY”)?还是在之前/之后我必须进行一些数据转换?(如果这有意义的话)似乎有点太“简单”,哈哈。那么当我需要取整到最近的周、月、年等时呢?然后使用
TRUNC
'IW',MM',YYYY'
-或者阅读。哦,很抱歉混淆:(,我知道那部分(我可以用谷歌搜索har-har,我知道如何将日期取整到最近的年、月、周等。),但当我提取日期时,它是否像这样简单地进行取整?TRUNC(SYS_extract_UTC(hr),'yyyy')?还是在之前/之后我必须进行一些数据转换?(如果有意义的话)似乎有点太“简单”,哈哈。