Форум: "Прочее";
Текущий архив: 2011.01.23;
Скачать: [xml.tar.bz2];
ВнизОтчет за период. Интерфейс. Как Вы понимаете, с какого по какое? Найти похожие ветки
← →
12 © (2010-10-06 08:59) [0]т.е. за месяц, например, - это с первого по последнее или с первого по первое?
Как Вы понимаете для себя и как делаете обычно?
Просто интересно стало :)
← →
Palladin © (2010-10-06 09:03) [1]советую изучить понятия отрезка и интервала, понятия "до" и "по"
ну а месяц это месяц, у него нет двусмысленности
← →
Медвежонок Пятачок © (2010-10-06 09:16) [2]или с первого по первое?
а за следующий месяц - "со второго по второе"? ведь первое число уже попало в предыдущий отчет.
← →
И. Павел © (2010-10-06 09:18) [3]Думаю, речь идет об том: какую границу указывать, чтобы получить отчет за месяц.
Тут есть сложность в том, что кто-то указывает правую границу исключительно, а кто-то включительно. Недавно была такая вещь в программе: при постановке ТЗ было решено делать правую границу включительно, а при тестировании заказчик сказал, что все-таки нужно исключительно. Базу и программу не менял (там удобно работать с включительными интервалами), но вывод и сохранение даты немного изменил, что привело к появлению ошибки...
← →
RWolf © (2010-10-06 09:32) [4]чтобы получить отчет за месяц, надо так и указывать — отчет за месяц; какие могут быть разногласия?
← →
12 © (2010-10-06 09:38) [5]за месяц было к примеру
поставим вопрос так:
есть таблица, table. Есть поле table.CreateDT (datetime)
если пользователь указывает в интерфейсе, что ему нужны объекты, созданные
с 01.01.2010 по 01.01.2010
какие объекты должны попасть в отчет?
← →
RWolf © (2010-10-06 09:42) [6]это должно быть 1) согласовано с заказчиком; 2) оговорено в интерфейсе выбора периода, например: «с ___▼ по ___▼ включительно».
← →
12 © (2010-10-06 09:43) [7]Я считаю, что никакие. с 01.01.2010 по 01.01.2010 не прошло ни секунды
Но, почему то у юзеров появляются мнения, что должны попасть все объекты, созданные первого января.
Поправить то можно, но: Где логика?
Это уже со второй моей программой.
Вот и хочу узнать - я один так думаю или это специфично для технарей
← →
RWolf © (2010-10-06 09:45) [8]но предоставить возможность выбирать период длиной в месяц(квартал, полугодие) как альтернативу манипуляциям с календарём, я считаю, нужно.
← →
12 © (2010-10-06 09:45) [9]
> это должно быть 1) согласовано с заказчиком; 2) оговорено
> в интерфейсе выбора периода, например: «с ___▼ по ___▼ включительно».
Согласен. Это теперь будет отдельный дополнительный вопрос навсегда :)
Ну а как считаешь то сам?
← →
Sergey13 © (2010-10-06 09:46) [10]> [4] RWolf © (06.10.10 09:32)
ИМХО, разногласия могут быть в том, что некоторые СУБД (я так понимаю про них речь) могут вообще не понять такого указания, а некоторые если и поймут, то будут тормозить с выполнением.
← →
RWolf © (2010-10-06 09:51) [11]
> 12 © (06.10.10 09:45) [9]
считаю, что для юзера интуитивно понятнее, когда правая граница включена в интервал; т.е. когда выбор «с 1 по 31 января» означает "1 янв 00:00" <= datetime < "1 фев 00:00".
← →
Думкин © (2010-10-06 10:05) [12]
> но: Где логика?
в словах заказчика. Как у солдат - приказы не обсуждаются.
Меня вот много как разработчика бесит в требованиях заказчиков, но и ладно.
← →
Юрий Зотов © (2010-10-06 10:09) [13]Ох, больная тема...
1. Обязательно согласовать с заказчиком.
2. Делать так, как он скажет.
3. В коде обязательно предусмотреть возможность простого и быстрого переключения (например, объявив пограничные даты именованными константами и далее работая только через их имена).
> это специфично для технарей
Для технарей как раз специфична простая, четкая, однозначная и всем понятная логика. А игнорирование разницы между "включительно" и "исключительно" свойственно как раз НЕтехнарям. Мог бы привести пару примеров на эту тему - ухохочешься.
← →
Медвежонок Пятачок © (2010-10-06 10:12) [14]но: Где логика?
Логика простейшая.
Хотят "отчет за месяц".
Скажем звонит вася пете и говорит - "петя, построй мне отчет за месяц"
петя васе: "за какой месяц?"
вася пете: "за сентябрь"
итого: отчет с первого сентября по тридцатое, ибо первое октября это уже не сентябрь
← →
DiamondShark © (2010-10-06 10:13) [15]
> Мог бы привести пару примеров на эту тему - ухохочешься.
Приведите, пожалуйста.
← →
Anatoly Podgoretsky © (2010-10-06 10:13) [16]
> 12 © (06.10.10 09:38) [5]
Это зависит от типа данных и от СУБД
Можно получить как включительно, так и исключительно.
Я правую границу задаю как <
← →
Юрий Зотов © (2010-10-06 10:19) [17]
> DiamondShark © (06.10.10 10:13) [15]
Нельзя. Неполиткорректно.
← →
DiamondShark © (2010-10-06 10:22) [18]
> Нельзя. Неполиткорректно.
Материться придётся? Понимаю ;)
← →
Kerk © (2010-10-06 10:28) [19]Я как-то в похожей задачей столкнулся с веселой неоднозначностью, связанной с високосными годами.
На сцене Oracle:MONTHS_BETWEEN(DATE"2009-02-28",DATE"2008-02-29‘)
————————————————-
12
MONTHS_BETWEEN(DATE’2009-02-28′,DATE’2008-02-28‘)
————————————————-
12
И ведь все верно.
If date1 and date2 are either the same days of the month or both last days of months, then the result is always an integer
← →
Медвежонок Пятачок © (2010-10-06 10:31) [20]с 01.01.2010 по 01.01.2010
какие объекты должны попасть в отчет?
вопрос неправильный сам по себе.
с какого по какое - это элемент интерфейса, который видит юзер.
а какие значения параметров для селекта должны при этом порождаться - это вопрос следующий:
юзер оперируя этими датами может захотеть отчет и за одни сутки и за много суток.
так вот: спроси себя, что он должен будет вводить в эти контролы чтобы получить отчет за нужный ему период, если твоя логика интерпретации этих границ будет такая-то.
← →
Petr V. Abramov © (2010-10-06 13:31) [21]
> 12 © (06.10.10 09:43) [7]
>
> Я считаю, что никакие. с 01.01.2010 по 01.01.2010 не прошло
> ни секунды
> Но, почему то у юзеров появляются мнения, что должны попасть
> все объекты, созданные первого января.
> Поправить то можно, но: Где логика?
с утра date_from по вечер date_to
любая субд на вопрос between 01.01.2010 and 01.01.2010 выдаст записи за первое января, по-моему, это даже в стандарте, а его не совсем дураки делали.
← →
Думкин © (2010-10-06 13:52) [22]
> любая субд на вопрос between 01.01.2010 and 01.01.2010
это не так. Можно и шиш получить.
← →
DiamondShark © (2010-10-06 14:02) [23]
> любая субд на вопрос between 01.01.2010 and 01.01.2010 выдаст
> записи за первое января
Любая СУБД на запрос between 01.01.2010 and 01.01.2010 выведет записи за 01.01.2010 00:00:00.000, если тип поля DATETIME, и записи за 01.01.2010, если тип поля DATE.
А это разные результаты.
В чуть менее, чем всех СУБД даты хранятся со временем, а тип DATE является лишь псевдонимом к DATETIME, и принудительной обрезки времени не производится. Даже если логика предметной области предполагает точность времени до дня, из-за хреновой фильтрации ввода в поля может попасть мусорная информация о времени. Как следствие, запрос between 01.01.2010 and 01.01.2010 не выведет вообще ни одной записи.
← →
DVM © (2010-10-06 14:03) [24]
> это не так. Можно и шиш получить.
В какой СУБД будет шиш?
← →
DiamondShark © (2010-10-06 14:04) [25]
> DVM © (06.10.10 14:03) [24]
> > это не так. Можно и шиш получить.В какой СУБД будет шиш?
Почти в любой.
← →
Anatoly Podgoretsky © (2010-10-06 14:04) [26]> Petr V. Abramov (06.10.2010 13:31:21) [21]
Все даты от 01.01.2010 00:00:00 по 01.01.2010 00:00:00
← →
DVM © (2010-10-06 14:05) [27]
> DiamondShark © (06.10.10 14:04) [25]
Надо попробовать, чето никогда не задумывался над этим, наверное потому что в таких запросах у меня всегда время фигурировало кроме даты.
← →
DiamondShark © (2010-10-06 14:14) [28]
> DVM © (06.10.10 14:05) [27]
Это у вас всегда время.
А вот представьте, где-то так сделано, что поле по логике должно хранить только день. Тип поля физически -- DATETIME. И где-то в клиенте есть быдлокод вроде:
defaultDate = DateTime.Now;
И больше нигде никакой фильтрации.
Усё. Приплыли.
← →
Petr V. Abramov © (2010-10-06 14:16) [29]
> Даже если логика предметной области предполагает точность
> времени до дня, из-за хреновой фильтрации ввода в поля может
> попасть мусорная информация о времени.
ну сдуру-то можно знаешь чего сломать?
← →
stas © (2010-10-06 14:30) [30]12 © (06.10.10 08:59)
Я понимаю и всегда делаю c первого по последний включительно.
← →
Игорь Шевченко © (2010-10-06 14:38) [31]Во многих СУБД есть функции отсечения времени от даты. Они рулез
← →
DiamondShark © (2010-10-06 15:04) [32]
> ну сдуру-то можно знаешь чего сломать?
Если бы все были умными, компьютеры были бы не нужны.
Вот совсем недавно ветка была, где упоминались сектанты новой технологии, у которых база без констрейнтов, потому что клиент умный.
← →
Petr V. Abramov © (2010-10-06 15:11) [33]
> DiamondShark © (06.10.10 15:04) [32]
>
>
хватит и 5% умных
← →
Anatoly Podgoretsky © (2010-10-06 15:26) [34]> Petr V. Abramov (06.10.2010 15:11:33) [33]
5 процентов не прокормить.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2011.01.23;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.004 c