Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / округлить дату до 30 минут / 21 сообщений из 21, страница 1 из 1
02.09.2015, 17:30
    #39041785
округлить дату до 30 минут
Всем привет,

никак не могу "дотумкать"...
Нужно округлить дату до 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
02.09.2015, 17:35
    #39041792
hardhouse
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
...
Рейтинг: 0 / 0
02.09.2015, 17:39
    #39041799
varlamovvp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
Hans Christian Andersen!,

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

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

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

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

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

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

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

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

от 15:00:00 до 15:29:59 ---->результат---> 15:00:00
от 15:30:00 до 15:59:59 ---->результат---> 15:30:00
...
Рейтинг: 0 / 0
02.09.2015, 19:22
    #39041867
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
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
02.09.2015, 19:27
    #39041870
округлить дату до 30 минут
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
02.09.2015, 19:52
    #39041881
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
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
02.09.2015, 22:00
    #39041939
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
stax..,

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

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
29.11.2018, 09:29
    #39740214
okisel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
select to_char(sysdate,'dd.mm.yyyy hh24')||':'||Trunc(To_char(sysdate,'mi')/10)||'0' from dual
...
Рейтинг: 0 / 0
29.11.2018, 09:51
    #39740225
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
okiselполлучаемРешение не достаточно изящно, чтобы хвастаться в задаче с другими условиями.
...
Рейтинг: 0 / 0
29.11.2018, 12:10
    #39740294
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
-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
29.11.2018, 19:46
    #39740535
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
Про 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
29.11.2018, 19:50
    #39740536
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
округлить дату до 30 минут
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / округлить дату до 30 минут / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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