0

我想要一个 SQL 代码来area根据每天的时间间隔更新列。

我的start_time专栏也是varchar2,而不是date专栏,

例如:

between 06:00:00 and 10:00:00 = 'A'<br>
between 10:00:00 and 15:30:00 = 'B'<br>
between 15:30:00 and 22:00:00 = 'C'<br>

表名:myTable

   id    name        start_time        area
    ============================================
    1     a        06/07/19 11:00        -
    2     b        06/07/19 09:00        -
    3     c        06/07/19 11:00        -
    4     d        07/07/19 13:00        -
    5     e        07/07/19 21:00        - 
    6     f        08/07/19 16:00        -
    7     g        08/07/19 01:00        -
    8     h        08/07/19 18:00        -

结果:

   id    name       start_Time         area
  ============================================
    1     a        06/07/19 11:00        B
    2     b        06/07/19 09:00        A
    3     c        06/07/19 11:00        B
    4     d        07/07/19 13:00        B
    5     e        07/07/19 21:00        C 
    6     f        08/07/19 16:00        C
    7     g        08/07/19 01:00        -
    8     h        08/07/19 18:00        C

我做了一个有效的 SQL 查询:

select * 
from myTable 
where  TO_CHAR(TO_DATE(TIME_START,'YYYY-MM-DD HH24:MI:SS'), 'HH24:MI:SS') 
       BETWEEN TO_CHAR(TO_DATE('2019/11/11/ 06:00:00','YYYY-MM-DD HH24:MI:SS'), 'HH24:MI:SS') 
       AND TO_CHAR(TO_DATE('2019/11/11/ 13:30:00','YYYY-MM-DD HH24:MI:SS'), 'HH24:MI:SS')

但是我创建了一个列,现在我想在记录而不是查询上更新它。

4

2 回答 2

0

您可以使用to_char()and 一个case表达式:

update mytable
    set area = (case when to_char(start_time, 'HH24:MI') >= '06:00' and to_char(start_time, 'HH24:MI') < '10:00'
                     then 'A'
                     when to_char(start_time, 'HH24:MI') >= '10:00' and to_char(start_time, 'HH24:MI') < '15:30'
                     then 'B'
                     when to_char(start_time, 'HH24:MI') >= '15:30' and to_char(start_time, 'HH24:MI') < '22:00'
                     then 'C'
                end);
于 2019-12-01T12:42:51.577 回答
0

我的错误是我的 time_start 列是 varchar2,而不是 date 列,因此使用此代码可以正常工作

update myTable 
    set area = (case when substr(time_start,10,8) >= '06:00:00' and substr(time_start,10,8) <= '06:59:59' then 'A' 
                     when substr(time_start,10,8) >= '07:00:00' and substr(time_start,10,8) <= '07:59:59' then 'B' 
                     when substr(time_start,10,8) >= '08:00:00' and substr(time_start,10,8) <= '08:59:59' then 'C' 
end);

——</p>

谢谢

于 2019-12-01T13:25:30.577 回答