|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Доброе время суток форумчане. Мне нужно в БД хранить деапазон сезонов работы Например Код: sql 1. 2.
И т.д. Соответственно без номеров лет, только «число» и « месяц ». В каком формате удобно будет хранить мне эту иформацию? с учетом, что я хочу проводить операции с датами в внутренней процедуре Firebired. Например: одним из входных параметров для внутренней процедуры будет дата, и мне понадобится узнать к какому сезону она пренадлежит. Спасибо за ответ ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2019, 19:59 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010, без года день и месяц это просто отдельные числа, а не дата. p.s. "диапазон", "принадлежит". ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2019, 20:23 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
kdv, а, значит исходя из примера Код: sql 1. 2.
это будет 2 поля типа "integer" и тогда это будет Код: sql 1. 2.
я об этом думал, но есть ли в FB3 функция, которая например из поля типа " DATE ", вытянуть " число " и " месяц " в типе " integer "? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2019, 22:30 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2019, 22:50 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010, 1. Диапазоны хранить в днях с начала года. Число получать через extract yearday. 2. Диапазоны хранить в виде чисел, представляющих ММ.ДД, например 101 - 431, 131-831, тогда их можно будет сравнивать на вхождение в диапазон чисел, а не то, что вы начали выдумывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 09:12 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010это будет 2 поля типа "integer" и тогда это будет 101 - 3104 3101 - 3108 если уж собрались хранить месяц + дату в одном поле integer то хоть тогда уж сделайте так чтобы 02 января было < 01 февраля, то есть 02 января это 102 01 февраля это 201 это позволит в вашей процедуре перевести дату в integer в формат MMDD и искать попадание в диапазон запросом типа Код: plsql 1. 2. 3.
где BEGR это начало в формате MMDD, а ENDR конец в формате MMDD ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 09:34 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010, тогда уж номер дня хранить, а не вот это 101 для 1 января. Правда, 29 февраля всё испортит. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 09:43 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
в диапазоне вместо 28 февраля умышленно сохранять 0229 но тогда диапазон скажем с 28 февраля по 29 февраля станет невозможно задать, но это уже документировать как ограничение системы ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 09:45 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Какое здесь громкое эхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 09:50 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010, храни как даты. Условный год - двухтысячный. Всё равно extract использовать. Если нужно в интерфейсе где-то показывать, то используй функцию dateadd. В расчётах тоже dateadd рулит в таком случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 10:33 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010это будет 2 поля типа "integer" и тогда это будет Код: sql 1. 2.
Достаточно SMALLINT и хранение по формуле month * 100 + day Код: plaintext 1.
Код: plsql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 11:16 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
01.08.2019 11:16, rdb_dev пишет: > Достаточно SMALLINT совершенно бесполезный тип данных. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 13:39 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
a7exander, Ну вот хорошо, храню я в формате " ММДД ", (" хранение по формуле month * 100 + day ") у меня есть два сезона: летний и зимний соответственно Код: sql 1. 2.
если я задам например июньскую дату например 602 , он по Код: sql 1. 2. 3.
найдет нужный сезон - " лето " а как быть с зимними датами, например мартовской 307 ? тут нужно что-то дописать? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:16 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010, В этом случае мой подход рулит. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:34 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010у меня есть два сезона: летний и зимний соответственно Код: sql 1. 2.
101 - 430 зима 501 - 930 лето 1001 - 3112 зима и ещё используй between, читабельнее, чем куча <= >= ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 15:39 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010 Код: sql 1. 2. 3.
найдет нужный сезон - " лето " а как быть с зимними датами, например мартовской 307 ? тут нужно что-то дописать?Решение более, чем очевидно, но может не работать в СУБД, отличных от FirebirdSQL в отношении симметрии предиката BETWEEN: Код: plsql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 16:06 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010a7exander, Ну вот хорошо, храню я в формате " ММДД ", (" хранение по формуле month * 100 + day ") у меня есть два сезона: летний и зимний соответственно Код: sql 1. 2.
если я задам например июньскую дату например 602 , он по Код: sql 1. 2. 3.
найдет нужный сезон - " лето " а как быть с зимними датами, например мартовской 307 ? тут нужно что-то дописать? Озвучил-бы вкратце изначальную постановку задачи, а не промежуточные выводы глядишь и толку было-бы больше. зы. Насколько я понимаю: - рано или поздно год все равно понадобится - как бы не божились что даты начала и окончания сезонов не будут меняться верить этому нельзя И исходя из этого я бы не заморачивался с такими хитростями завел бы табличку год сезон дата начала (именно дата) дата окончания (именно дата) ...... заполнял-бы её (либо ручками на далеко вперед, либо при "закрытии/открытии нового сезона") и работал-бы с ней не маясь ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 17:17 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
поддержу предыдущего оратора, почему не забить все сезоны с конкретными датами и проверять даты на вхождение в диапазон ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 19:37 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
rdb_devРешение более, чем очевидно, но может не работать в СУБД, отличных от FirebirdSQL в отношении симметрии предиката BETWEEN: Код: plsql 1. 2. 3. 4.
Этот запрос в зимних месяцах не работает (FB3)... WildSery101 - 430 зима 501 - 930 лето 1001 - 3112 зима и ещё используй between, читабельнее, чем куча <= >= Да, попробую поэкспериментировать. Действительно, у меня в приложении пользователь может менять числа ( "от "..." до ") и месяцы только в двух сезонах: лето и зима . Заведу в таблице 3 строки (лето, зима, зима): Код: sql 1. 2. 3.
при изменении числа и месяца в одном из сезонов буду триггером менять их в других двух строках ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2019, 23:34 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010rdb_devРешение более, чем очевидно, но может не работать в СУБД, отличных от FirebirdSQL в отношении симметрии предиката BETWEEN: Код: plsql 1. 2. 3. 4.
Этот запрос в зимних месяцах не работает (FB3)... Должен работать на 100%. Запрос правильный. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 09:32 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
KreatorXXI, сам лично проверил - действительно не работает. Либо ошибка в мануале, либо в СУБД. Склоняюсь к первому. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 09:33 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010Этот запрос в зимних месяцах не работает (FB3)...Если ты действительно программист и читал reference manual для FB3, давно должен был предположить ошибку в ФБ или в мануале и написать обходную реализацию запроса. Ты точно программист? Код: sql 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 09:36 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
Kos-2010, не забудь проиндексировать. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 09:49 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
rdb_dev, и в чём же ошибка мануала? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 10:42 |
|
Firebired3 удобство храение даты без цифры года.
|
|||
---|---|---|---|
#18+
rdb_devKreatorXXI, сам лично проверил - действительно не работает. Либо ошибка в мануале, либо в СУБД. Склоняюсь к первому. Вообще какое-то странное поведение between. Вот запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Выдаёт две записи. Отключение поочередно условия в фильтре приводят к выдаче то первой, то второй записи. Заметьте - без NOT! С мануалом явно не совпадает. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.08.2019, 10:45 |
|
|
start [/forum/topic.php?fid=40&fpage=21&tid=1560633]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 404ms |
0 / 0 |