powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / округлить дату до 30 минут
21 сообщений из 21, страница 1 из 1
округлить дату до 30 минут
    #39041785
Всем привет,

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

что здесь неправильно?
Код: plsql
1.
2.
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;
 
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041792
hardhouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041799
varlamovvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hans Christian Andersen!,

неправильно условие "округлить" - привести к ближайшему получасу? или то что написано?
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041808
varlamovvpHans 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
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041810
hardhouse,

ccылка на другое условие
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041828
hardhouse
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hans Christian Andersen!hardhouse,

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

там решение той же задачи, только с другими яйцами, да еще и в нескольких вариантах
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041833
hardhouseHans 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
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041841
@
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
@
Гость
Hans Christian Andersen!,

round заменить на trunc в вашем запросе, не
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041848
@Hans Christian Andersen!,

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

....?
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041851
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hans Christian Andersen!,

вообще, тута (на форуме то бишь)
округляли, но только не до 30 а до 5 и до 10
например
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041855
Hans Christian Andersen!,
еще раз задание
Нужно округлить дату до 30 минут

от 15:00:00 до 15:29:59 ---->результат---> 15:00:00
от 15:30:00 до 15:59:59 ---->результат---> 15:30:00
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041867
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 минут в меньшую сторону?

отличается от Вашего?
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041870
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
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041881
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  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
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39041939
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..,

>=
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
округлить дату до 30 минут
    #39740212
okisel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
было

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
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39740214
okisel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select to_char(sysdate,'dd.mm.yyyy hh24')||':'||Trunc(To_char(sysdate,'mi')/10)||'0' from dual
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39740225
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
okiselполлучаемРешение не достаточно изящно, чтобы хвастаться в задаче с другими условиями.
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39740294
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-okiselполлучаемРешение не достаточно изящно, чтобы хвастаться в задаче с другими условиями.+1

Разъяснение
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
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.
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39740535
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про aрифметику дат почитай. 10 минут = 1 / 144 суток:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
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.
...
Рейтинг: 0 / 0
округлить дату до 30 минут
    #39740536
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYПро aрифметику дат почитай. 10 минут = 1 / 144 суток
Ну блин, только я хотел волшебное число 48 показать...
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
[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]
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / округлить дату до 30 минут
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]