Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / date + 0.99999 / 15 сообщений из 15, страница 1 из 1
06.08.2019, 13:28
    #39845833
mrwert
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
Добрый день, возник небольшой спор
Какие железобетонные аргументы можно привести, что бы перестали писать выражения вида
Код: plsql
1.
reg_date BETWEEN l_from_dat  AND l_to_dat + 0.99999



Мои аргументы - это уродливо, и что будем делать если это будет timestamp? девяток то уже не хватит

Раньше лепили 0.999 - это 23:58:34, ошибку исправили на 0.99999 - 23:59:59
...
Рейтинг: 0 / 0
06.08.2019, 13:41
    #39845841
alex-ls
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
а если в переменной дата со временем, что получится?
...
Рейтинг: 0 / 0
06.08.2019, 13:43
    #39845842
feagor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
mrwert,

Если нет регламента написания кода, то никак, если есть - внести в недопустимые решения.
Но каких-либо внятных аргументов против вы не привели "уродливо"-это вкусовщина, timestamp - это другой тип данных, очевидно что данный финт расчитан именно на использование в типе date

Я бы вместо "уродливо" использовал формулировку - "не очевидно и усложняет понимание кода", так же много у кого в регламентах по коду есть запрет на использование "магических чисел" в коде, можно использовать и его.
...
Рейтинг: 0 / 0
06.08.2019, 13:47
    #39845845
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
mrwertчто бы перестали писать выражения вида

Правильно будет писать
Код: sql
1.
reg_date >= l_from_dat AND reg_date < l_to_dat + interval 1 day


Но этому ты никого не обучишь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
06.08.2019, 13:49
    #39845846
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
mrwertчто будем делать если это будет timestamp? девяток то уже не хватит


Как только ты прибавишь/вычтешь из timestamp так сразу timestamp неявно преобразуется в date и дробная часть секунд потеряется. Date arithmetic подразумевает date. С timestamp, в общем случае, прибавляем/вычитаем interval.

SY.
...
Рейтинг: 0 / 0
06.08.2019, 13:49
    #39845847
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
mrwert,

https://oracleplsql.ru/to_dsinterval-function.html - и не компилить кода на уровне системного тригера где содержится like (%0.999%)
...
Рейтинг: 0 / 0
06.08.2019, 13:53
    #39845850
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
Dimitry SibiryakovПравильно будет писать


Для timestamp - да. А для date правильно будет писать

Код: plsql
1.
reg_date >= l_from_dat AND reg_date < l_to_dat + 1



Зачем неявные (хоть и дешевые) преобразования.

SY.
...
Рейтинг: 0 / 0
06.08.2019, 14:01
    #39845858
mrwert
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
feagor,

feagor "уродливо"-это вкусовщина - полностью согласен, "не очевидно и усложняет понимание кода" - звучит намного лучше
...
Рейтинг: 0 / 0
06.08.2019, 14:18
    #39845867
mrwert
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
Спасибо всем,
В общем как говорил один персонаж - "Нужна политическая воля" ))
...
Рейтинг: 0 / 0
06.08.2019, 14:19
    #39845869
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
SYС timestamp, в общем случае, прибавляем/вычитаем interval.Вопрос о нестрогом сравнении верхней границы. С таймстампом проблема усугубляется неявностью неявной точности таймстамп-выражений и интервал-литералов
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select timestamp '1-1-1 0:0:0.123456789' - timestamp '1-1-1 0:0:0' t from dual
union all
select interval '0.123456789' second(9) from dual;

T                     
----------------------
+00 00:00:00.123456789
+00 00:00:00.123457



Vintи не компилить кода на уровне системного тригера где содержится like (%0.999%)86399/86400
...
Рейтинг: 0 / 0
06.08.2019, 14:41
    #39845883
SeaGate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
-2-Вопрос о нестрогом сравнении верхней границы. С таймстампом проблема усугубляется неявностью неявной точности таймстамп-выражений и интервал-литералов
Первая цифра в SECOND это leading_precision:
INTERVAL DAY TO SECOND
Код: plsql
1.
2.
3.
4.
5.
SQL> select interval'0.123456789' second(9,9) ds from dual;

DS
---------------------------------------------------------------------------
+000000000 00:00:00.123456789
...
Рейтинг: 0 / 0
06.08.2019, 15:24
    #39845904
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
-2-,
ну можно написать и -1-interval '1' second и еще десятки способов. от криворукости нет спасения. только code review нормальный.
...
Рейтинг: 0 / 0
06.08.2019, 15:59
    #39845926
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
не, это круче
Код: plsql
1.
to_char(to_date(sysdate), 'dd.mm.rrrr')
...
Рейтинг: 0 / 0
06.08.2019, 22:10
    #39846106
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
SYDimitry SibiryakovПравильно будет писать
Код: plsql
1.
reg_date >= l_from_dat AND reg_date < l_to_dat + interval 1 day

Для timestamp - да.Это универсально для любого datetime. Это самодокументировано.
SYА для date правильно будет писать
Код: plsql
1.
reg_date >= l_from_dat AND reg_date < l_to_dat + 1

Зачем неявные (хоть и дешевые) преобразования.Какие преобразования?
...
Рейтинг: 0 / 0
08.08.2019, 08:54
    #39846764
Cavia porcellus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
date + 0.99999
Dimitry SibiryakovПравильно будет писать
Код: sql
1.
reg_date >= l_from_dat AND reg_date < l_to_dat + interval 1 day



Но этому ты никого не обучишь.
Главное, чтобы привыкнув к такому, не написали бы потом
Код: sql
1.
select to_date('30.01', 'dd.mm') + interval '1' month from dual
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / date + 0.99999 / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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