Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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 当时间介于午夜和上午6点之间时,日期减去一天-甲骨文_Sql_Oracle_Datetime_Case_Where Clause - Fatal编程技术网

Sql 当时间介于午夜和上午6点之间时,日期减去一天-甲骨文

Sql 当时间介于午夜和上午6点之间时,日期减去一天-甲骨文,sql,oracle,datetime,case,where-clause,Sql,Oracle,Datetime,Case,Where Clause,我试图在语句中将时间戳的日期更改为午夜之后和上午6点之前的前一天时执行一个案例。我的公司的工作时间是早上6点到早上6点,所以我想滚动午夜到早上6点之间发生的任何事情,以显示前一天的实例。无论何时尝试运行它,它都会给我以下错误,但我不知道如何修复它。我试着把间隔部分去掉,TRUNC日期,但我想不出有什么效果 ORA-30081: invalid data type for datetime/interval arithmetic 30081. 00000 - "invalid data

我试图在语句中将时间戳的日期更改为午夜之后和上午6点之前的前一天时执行一个
案例。我的公司的工作时间是早上6点到早上6点,所以我想滚动午夜到早上6点之间发生的任何事情,以显示前一天的实例。无论何时尝试运行它,它都会给我以下错误,但我不知道如何修复它。我试着把
间隔
部分去掉,
TRUNC
日期,但我想不出有什么效果

ORA-30081: invalid data type for datetime/interval arithmetic
30081. 00000 -  "invalid data type for datetime/interval arithmetic"
*Cause:    The data types of the operands are not valid for datetime/interval
           arithmetic.
*Action:
Error at Line: 2 Column: 104
查询:

SELECT 
CASE WHEN TO_CHAR(ADJUSTMENTTIME, 'HH24') BETWEEN 00 AND 06 THEN TO_CHAR(ADJUSTMENTTIME, 'YYYY-MM-DD') - INTERVAL '1' DAY
  ELSE TO_CHAR(ADJUSTMENTTIME, 'YYYY-MM-DD')
  END AS ADJ_DATE, 
CASE WHEN TO_CHAR(ADJUSTMENTTIME, 'HH24') BETWEEN 06 AND 17 THEN ' DAYS' 
  ELSE ' NIGHTS'
  END AS ADJUSTMENTHOUR, SUM(ADJUSTEDAMOUNT) AS ADJ_QTY
From
*DATASOURCE*
WHERE
DESTINATIONSTATUS = 'RIP' AND
ADJUSTMENTTIME BETWEEN '05-Aug-20 06.00.00.000000000 AM' AND '06-Aug-20 06.00.00.000000000 AM'
GROUP BY ADJUSTMENTTIME

从事先的日期中减去6小时更简单:

select 
    to_char(adjustmenttime - interval '6' hour, 'yyyy-mm-dd') as adj_date,
    case when to_char(adjustmenttime, 'hh24') between '06' and '17'
        then 'days'
        else 'nights'
    end as adj_hour,
    sum(adjustmentamount) adj_amount
from datasource
where 
    destinationstatus = 'RIP'
    and adjustmenttime >= timestamp '2020-08-05 06:00:00'
    and adjustmenttime < timestamp '2020-08-06 06:00:00'
group by 1, 2
选择
将字符(调整时间-间隔“6”小时,“yyyy-mm-dd”)作为调整日期,
在'06'和'17'之间输入字符(调整时间'hh24')的情况
然后是“天”
其他“夜晚”
以调整小时结束,
总额(调整金额)调整金额
来自数据源
哪里
destinationstatus='RIP'
和调整时间>=时间戳'2020-08-05 06:00:00'
和调整时间<时间戳'2020-08-06 06:00:00'
分组1,2

错误似乎是由于您试图将
后面的字符串与
中的数字进行比较,使其介于00和06之间。使用函数获取小时数,然后将其与数字进行比较