Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 округлить дату до 30 минут  [new]
Hans Christian Andersen!
Guest
Всем привет,

никак не могу "дотумкать"...
Нужно округлить дату до 30 минут
Пример
от 15:00:00 до 15:29:59 ---> 15:00:00
от 15:30:00 до 15:59:59 ---> 15:30:00

что здесь неправильно?
select trunc(to_date('02.09.2015 15:22:31','dd.mm.yyyy HH24:MI:SS'),'HH24')+(round(to_char(to_date('02.09.2015 15:22:31','dd.mm.yyyy HH24:MI:SS'),'MI')/30)/2/24) from dual;
 
2 сен 15, 17:30    [18100948]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
hardhouse
Member

Откуда:
Сообщений: 51
https://community.oracle.com/thread/1008150
2 сен 15, 17:35    [18100974]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
varlamovvp
Member

Откуда: Moscow
Сообщений: 271
Hans Christian Andersen!,

неправильно условие "округлить" - привести к ближайшему получасу? или то что написано?
2 сен 15, 17:39    [18100999]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
Hans Christian Andersen!
Guest
varlamovvp
Hans Christian Andersen!,

неправильно условие "округлить" - привести к ближайшему получасу? или то что написано?


Условие
от 15:00:00 до 15:29:59 ---> 15:00:00
от 15:30:00 до 15:59:59 ---> 15:30:00

Select-Statement не правильный. Ошибка здесь /30)/2/24
2 сен 15, 17:43    [18101027]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
Hans Christian Andersen!
Guest
hardhouse,

ccылка на другое условие
2 сен 15, 17:45    [18101036]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
hardhouse
Member

Откуда:
Сообщений: 51
Hans Christian Andersen!
hardhouse,

ccылка на другое условие


там решение той же задачи, только с другими яйцами, да еще и в нескольких вариантах
2 сен 15, 18:24    [18101111]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
Hans Christian Andersen!
Guest
hardhouse
Hans Christian Andersen!
hardhouse,

ccылка на другое условие


там решение той же задачи, только с другими яйцами, да еще и в нескольких вариантах


Красным показано несоответствие с моим условием

2009-12-28 11:08:19 2009-12-28 11:00:00
2009-12-28 11:18:19 2009-12-28 11:30:00
2009-12-28 11:38:19 2009-12-28 11:30:00
2009-12-28 11:48:19 2009-12-28 12:00:00
2 сен 15, 18:32    [18101144]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
@
Guest
Hans Christian Andersen!,

round заменить на trunc в вашем запросе, не
2 сен 15, 18:41    [18101177]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
Hans Christian Andersen!
Guest
@
Hans Christian Andersen!,

round заменить на trunc в вашем запросе, не


....?
2 сен 15, 18:55    [18101216]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15436
Hans Christian Andersen!,

вообще, тута (на форуме то бишь)
округляли, но только не до 30 а до 5 и до 10
например
2 сен 15, 18:58    [18101232]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
Hans Christian Andersen!
Guest
Hans Christian Andersen!,
еще раз задание
Нужно округлить дату до 30 минут

от 15:00:00 до 15:29:59 ---->результат---> 15:00:00
от 15:30:00 до 15:59:59 ---->результат---> 15:30:00
2 сен 15, 19:00    [18101245]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 6422
Hans Christian Andersen!
Hans Christian Andersen!,
еще раз задание
Нужно округлить дату до 30 минут

от 15:00:00 до 15:29:59 ---->результат---> 15:00:00
от 15:30:00 до 15:59:59 ---->результат---> 15:30:00

Чем условие 7945831
forall
Как округлить дату до 10 минут в меньшую сторону?

отличается от Вашего?
2 сен 15, 19:22    [18101315]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
Hans Christian Andersen!
Guest
Hans Christian Andersen!,

вот
with t as (select to_date('02.09.2015 15:00:31','dd.mm.yyyy HH24:MI:SS') as d from dual)
select trunc(d,'dd')+trunc(to_char(d,'sssss')/1800)/48 d2 from t
2 сен 15, 19:27    [18101331]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
stax..
Guest
Hans Christian Andersen!
Hans Christian Andersen!,
еще раз задание
Нужно округлить дату до 30 минут

от 15:00:00 до 15:29:59 ---->результат---> 15:00:00
от 15:30:00 до 15:59:59 ---->результат---> 15:30:00

да че Вы мучетесь, влоб через case
  1  with t as (
  2  select to_date('02.09.2015 19:29:59','dd.mm.yyyy hh24:mi:ss') d from dual union all
  3  select to_date('02.09.2015 19:49:59','dd.mm.yyyy hh24:mi:ss') d from dual
  4  )
  5* select trunc(d,'hh24') + case when to_char(d,'mi')>'30' then 1/24/2 else 0 end dd from t
SQL> /

DD
-------------------
02.09.2015 19:00:00
02.09.2015 19:30:00


.....
stax
2 сен 15, 19:52    [18101403]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
stax..
Guest
stax..,

>=
2 сен 15, 22:00    [18101764]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: округлить дату до 30 минут  [new]
okisel
Member

Откуда:
Сообщений: 2
было

29.11.2018 09:22 select to_char(sysdate,'dd.mm.yyyy hh24:MI') from dual

округляем
select to_char(sysdate,'dd.mm.yyyy hh24')||':'||Trunc(To_char(sysdate,'mi')/10)||'0' from dual

поллучаем 29.11.2018 09:20
29 ноя 18, 09:28    [21748058]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
okisel
Member

Откуда:
Сообщений: 2
select to_char(sysdate,'dd.mm.yyyy hh24')||':'||Trunc(To_char(sysdate,'mi')/10)||'0' from dual
29 ноя 18, 09:29    [21748061]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
-2-
Member

Откуда:
Сообщений: 14079
okisel
поллучаем
Решение не достаточно изящно, чтобы хвастаться в задаче с другими условиями.
29 ноя 18, 09:51    [21748086]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
SQL*Plus
Member

Откуда: Россия, Москва
Сообщений: 7797
-2-
okisel
поллучаем
Решение не достаточно изящно, чтобы хвастаться в задаче с другими условиями.
+1

Разъяснение
SQL> SET ECHO ON;
SQL> ALTER SESSION SET nls_date_format = 'DD.MM.YYYY HH24:MI:SS';

Session altered.

SQL> 
SQL> CREATE OR REPLACE VIEW my_halfhour_trunc_good
  2  AS
  3  with t as (
  4  select to_date('02.09.2015 19:29:59','dd.mm.yyyy hh24:mi:ss') d from dual 
  5  union all
  6  select to_date('02.09.2015 19:49:59','dd.mm.yyyy hh24:mi:ss') d from dual
  7  )
  8  select trunc(d,'hh24') + case when to_char(d,'mi')>'30' then 1/24/2 else 0 end dd from t
  9  ;
View MY_HALFHOUR_TRUNC_GOOD created.

SQL> DESCRIBE my_halfhour_trunc_good;

Name Null? Type 
---- ----- ---- 
DD         DATE 

SQL> SELECT * FROM my_halfhour_trunc_good;

DD                 
-------------------
02.09.2015 19:00:00
02.09.2015 19:30:00

SQL> 
SQL> CREATE OR REPLACE VIEW my_halfhour_trunc_bad
  2  AS
  3  with t as (
  4  select to_date('02.09.2015 19:29:59','dd.mm.yyyy hh24:mi:ss') d from dual 
  5  union all
  6  select to_date('02.09.2015 19:49:59','dd.mm.yyyy hh24:mi:ss') d from dual
  7  )
  8  select to_char(d,'dd.mm.yyyy hh24')||':'||Trunc(To_char(d,'mi')/10)||'0' AS dd from t;
View MY_HALFHOUR_TRUNC_BAD created.

SQL> DESCRIBE my_halfhour_trunc_bad;

Name Null? Type         
---- ----- ------------ 
DD         VARCHAR2(55) 

SQL> SELECT * FROM my_halfhour_trunc_bad;

DD                                                     
-------------------------------------------------------
02.09.2015 19:20
02.09.2015 19:40

Неверные значения минут (другая задача - отсечение до 10 минут)
+ тип возвращаемых данных не DATE.
29 ноя 18, 12:10    [21748362]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9219
Про aрифметику дат почитай. 10 минут = 1 / 144 суток:

SQL> select  sysdate,
  2          trunc(sysdate) + round(144 * (sysdate - trunc(sysdate))) / 144 round_10_min
  3    from  dual
  4  /

SYSDATE             ROUND_10_MIN
------------------- -------------------
2018/11/29 11:31:57 2018/11/29 11:30:00

SQL> 
SQL> 
SQL> select  sysdate,
  2          trunc(sysdate) + round(144 * (sysdate - trunc(sysdate))) / 144 round_10_min
  3    from  dual
  4  /

SYSDATE             ROUND_10_MIN
------------------- -------------------
2018/11/29 11:35:09 2018/11/29 11:40:00

SQL> 


SY.
29 ноя 18, 19:46    [21749055]     Ответить | Цитировать Сообщить модератору
 Re: округлить дату до 30 минут  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 16897
SY
Про aрифметику дат почитай. 10 минут = 1 / 144 суток

Ну блин, только я хотел волшебное число 48 показать...
[SRC PLSQL]SQL> select sysdate  sd
  2       , trunc(sysdate) + trunc((sysdate-trunc(sysdate))*48)/48 sd_halfhour
  3  from dual
  4  ;
SD                  SD_HALFHOUR
------------------- -------------------
29.11.2018 19:48:31 29.11.2018 19:30:00

SQL> 
[/SRC]
29 ноя 18, 19:50    [21749057]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить