|
Interval data type
|
|||
---|---|---|---|
#18+
Всем привет. Пожалуйста помогите с решением данного вопроса. Как бы я не пытался не могу получить нужную информацию. Мне нужно совершить арифметическую операцию с типом данных interval и получить необходимый результат. Код: plsql 1. 2. 3.
Такой запрос выдает такой аутпут: Код: plsql 1.
Но мне нужно чтобы в аутпуте появилась информация о секунде, также необходимо чтобы был результат не конец дня а нынешнее время. При использовании такого запроса Код: plsql 1. 2. 3.
аутпут выдает такой результат: Код: plaintext 1.
Модератор: научитесь в конце концов использовать тег SRC ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 14:05 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy, Типы date и interval несовместимы. "+ INTERVAL '1' MONTH" - опасная операция. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 14:12 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy Код: plsql 1. 2. 3.
1. Вот так: to_date(SYSDATE, 'DD-MON-RR HH24:MI') вообще не пишите. Никогда. endy Но мне нужно чтобы в аутпуте появилась информация о секунде, Код: plsql 1.
endy также необходимо чтобы был результат не конец дня а нынешнее время. Тогда просто SYSDATE или CURRENT_DATE - о разнице прочтете в документации. Тезис: нельзя к нынешнему времени прибавить месяц и получить нынешнее время. По арифметике: Код: plsql 1. 2. 3. 4. 5.
+interval 1 month - операция кривая, с ней можно работать только с датами начала месяца, пустите в продуктив - подорвется, придется переделывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 14:15 |
|
Interval data type
|
|||
---|---|---|---|
#18+
andrey_anonymous Тезис: нельзя к нынешнему времени прибавить месяц и получить нынешнее время. Приношу свои извинения. Я не правильно выразился. Я имел ввиду что мне необходимо получить не сегодняшний день, а тоже самое время в следующем месяце. Допустим сейчас 16:58 23 апреля, мне нужно получить время 16:58 23 мая, но никак не 00:00 или 23:59 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 15:59 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy тоже самое время в следующем месяце. Невозможно - Вы вычитаете 3 секунды. И вот еще: что Вы ожидаете получить, добавляя месяц к 30 и 31 числу? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 16:16 |
|
Interval data type
|
|||
---|---|---|---|
#18+
andrey_anonymous, самому стало интересно :) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
видимо, дает последний день следующего месяца с учетом года ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 16:32 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy, Вы неправильно поняли to_date(SYSDATE - зависит от NLS часто "ошибка", неявное преобразование в строку Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
если надо обрезать секунды, trunc(sysdate,'mi') Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
ps INTERVAL 'хх' MONTH луче не использовать 22121440 розкоментируйте .... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 16:33 |
|
Interval data type
|
|||
---|---|---|---|
#18+
Stax INTERVAL 'хх' MONTH луче не использовать Интeрвальная арифметика с датами/таймстемпами производит действия тоько с теми частями дат/таймстемпов к которым интeрвал относится. INTERVAL '1' MONTH это TEAR TO MONTH интeрвал посему DATE '202-03-31' + INTERVAL '1' MONTH не изменит DAY TO SECOND часть имы получим 31 Апреля: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
А в високосный год: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 18:38 |
|
Interval data type
|
|||
---|---|---|---|
#18+
andrey_anonymous endy тоже самое время в следующем месяце. Невозможно - Вы вычитаете 3 секунды. И вот еще: что Вы ожидаете получить, добавляя месяц к 30 и 31 числу? Тут дело не столько в том чтобы получить конкретное время, мне просто хочется понять как работает данный запрос. Так как я готовлюсь к экзамену, а среди вопросов есть такие примеры. Мне просто стало интересно почему аутпут либо обрезает все до 00 или же округляет до конца дня. Альтернативный вариант мне не поможет, так как мне нужно понять именно как работает данный запрос. Я его не сам придумал, а нашел в тестах. Просто хочу понять почему округляется если я не ввожу нигде trunc или round. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 21:37 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy, То, что ты видишь, это всегда не даты, не интервалы и не числа, а строки, полученные из них. Смотри функции приведения к строке/форматирования в строку и читай про установку используемых ими параметров по умолчанию. То что тебя интересует называется Setting NLS Parameters например, здесь: https://docs.oracle.com/en/database/oracle/oracle-database/12.2/nlspg/setting-up-globalization-support-environment.html#GUID-6475CA50-6476-4559-AD87-35D431276B20 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 22:00 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy л, а нашел в тестах. Просто хочу понять почему округляется если я не ввожу нигде trunc или round. Потому что округления и в помине нет. Хoчешь понять анализируй каждое действие SELECTa (явное и неявное): to_date(SYSDATE, 'DD-MON-RR HH24:MI') Какие параметры у TO_DATE? Первый - строка. А что ты подсовываешь? Тип данных возвращаемый SYSDATE есть DATE а не строка. Что делает Oracle при несоответствии типов? Правильно, неявно преобразует. Т.е. результат SYSDATE преобразуется в строку для чего необходимо знать в какой формат преобразовывать. Где взять? Его задает параметр сессии NLS_DATE_FORMAT. Исходя из того что ты привел это DD-MON-YY. Посемуот SYSDATE возмется только 23-APR-20, т.е. в итоге имеем: to_date('23-APR-20', 'DD-MON-RR HH24:MI') Ясно что получаем дату началоа дня. SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.04.2020, 22:41 |
|
Interval data type
|
|||
---|---|---|---|
#18+
SY, Спасибо. Этот момент я понял. Я проверил без арифметических действий с sysdate и литералом и итог разный. Теперь понятно почему возвращается начало дня. Этот запрос возвращает нужные минуты и секнуды Код: plsql 1. 2.
Тогда как при использовании sysdate вместо литерала возвращается начало дня. Например: Код: plsql 1. 2.
Но всё таки остаётся неясным как решить указанный выше запрос с использованием именно арифметических действий, чтобы я не делал. Возвращается либо начало/конец дня или же в аутпуте дата указывается в формате DD-MON-RR тоесть указанный по умолчанию nls paramentre. Как же решить эту головоломку не поменяв nls parametre по умолчанию и не прибегнув к альтернативному решению... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 00:29 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endyНапример Не надо писать бред. Даже как пример. Открой документацию и посмотри что возвращает функция sysdate и что требуется первым параметром функции to_date. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 00:40 |
|
Interval data type
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Здравствуйте. Я просил о помощи так как не смог разобраться с документацией и на практике не получилось. Я написал по теме форума и благодарен всем кто помогает разобраться. Если вас задевает моя тема проходите мимо) Спасибо за понимание. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 00:43 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy SY, Спасибо. Этот момент я понял. Но всё таки остаётся неясным как решить указанный выше запрос Напоминает анекдот как в 20тые годы прошлого века в деревне лектор обьяснял мужикам что у них будет электрическй свет вместо керосиновых ламп и как работает электричество. После лекции встает мужик и говорит в общем я все понял, но как керосин по проводам течет убей бог не понимаю. SYSDATE это дата так зачем преобразвывать ее в строку а затем обратно к дате при этом теряя части даты??? Ты тестируешь арифметику дат с интервалами так и бери дату, добавляй/вычитай интервалы и только потом пребразовывай дату результата в строку желаемого формата для вывода на экран: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
SY. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 02:58 |
|
Interval data type
|
|||
---|---|---|---|
#18+
endy Тогда как при использовании sysdate вместо литерала возвращается начало дня. Например: Код: plsql 1. 2.
Но всё таки остаётся неясным еще раз зависит от НЛС Код: 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.
.... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
24.04.2020, 09:23 |
|
|
start [/forum/topic.php?fid=52&msg=39950581&tid=1881315]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
154ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 256ms |
0 / 0 |