| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > Определить даты понедельников |
| Автор: BuShaRt 27.2.2012, 17:30 |
| Задача: есть любая дата. Нужно определить понедельник недели, которой пренадлежит дата. На пример: 1. 22.02.2012 - Понедельником этой недели будет 20.02.2012 2. 9.02.2012 - Понедельником этой недели будет 6.02.2012 Реально ли это сделать на чистом SQL? |
| Автор: Fortop 27.2.2012, 21:31 |
Реально |
| Автор: BuShaRt 29.2.2012, 14:39 |
Как? Без сложный вложений? |
| Автор: Fortop 29.2.2012, 17:55 | ||
Конструкция может быть вложенной. т.е. в худшем из вариантов нужен ###код из 7 CASE Но можно поискать функции даты |
| Автор: Akina 29.2.2012, 22:56 | ||
|
| Автор: BuShaRt 3.5.2012, 14:50 | ||
| Fortop, Это попахивает быдлокодом... Akina, Спасибо! Отличное решение. Только в оригенале выдает ошибку, но легко можно поправить:
|
| Автор: BuShaRt 9.5.2012, 10:40 |
| Очень интересно было бы услышать мнение людей, ставящих минусы моему посту. Уверен, что они могут оспорить мои слова какой-то очень весомой информацией. |
| Автор: BuShaRt 15.5.2012, 12:21 | ||||
| Fortop, Предложенный Вами код очевиден и в представление не нуждается. Я бы даже сказал, что мысль о реальном использование таких конструкций говорит о непрофессиональности. Очень печально, что есть люди для которых это не очевидно, тем более, что я Выше попросил не приводить таких примеров:
Лучшее решение (именно то, что я ожидал услышать) привел, уважаемый Akina, за что ему большое спасибо. З.ы.: вообще, очень не красиво из-за личных переживаний минусовать посты. Если Вы еще не забыли, то это форум для общения специалистов в вопросах связанных с программированием и по сути поводом для минуса может быть только не согласие с техническими деталями, а не личные обиды. |
| Автор: igorold 15.5.2012, 13:11 |
| ... при чем тут, интересно, личные обиды? Тебе помогают, кто как может и не надо "плевать в дающую руку" ... |
| Автор: BuShaRt 15.5.2012, 15:29 |
| igorold, Есть в Ваших словах правда, но в народе такая помощь называется "медвежье услугой". Вопрос марали в данном случае заслуживает отдельного топика на форуме философов, но мы находимся на форуме программистов, где сообщение о том, что код некорректный (кратко "быдлокод") не является "плевком в душу", а констатирует тот факт, что код непрофессионален. Как воспринимать эту информацию - дело каждого. Я, на пример, искренне благодарен людям, которые на заре моей карьеры программиста меня тыкали носом в мой кривой код и говорили, что это немыслимый ужас необходимо переписывать. |
| Автор: Fortop 16.5.2012, 00:51 | ||
Медвежья услуга это то, что сделал Акина. Поскольку вы ни на грамм не приблизились к пониманию и умению работы с мануалами и поисковыми системами. Вам тупо разжевали и засунули в рот отрыжку. Оно конечно удобно... для вас.... Но вот работать с такими специалистами как вы - просто доставляет. Полсотни вопросов "как сделать", каждый из которых гуглится буквально за 2-3 минуты. Из мотивация ( и ваша подозреваю тоже) - спросить же быстрее, а думать самому так лениво... да и не умеем... Мое счастье, что таких у меня всего два человека и те понемногу перевоспитываются. Учитывая тематику топика (http://forum.vingrad.ru/topic-349316.html), ваша заря еще не закончилась. |
| Автор: igorold 16.5.2012, 07:08 | ||
... в том то и дело, что вопрос морали - это назвать чей-то код именно некорректным, а не "быдлокодом" ... мораль - категория этическая, а не филосовская ... Выше вам было предложено направление, а не конкретный код ... а непрофессионализм просматривается, как раз у вас ... И очень хочется, чтобы подобные программисты не марали своей писаниной программистский форум, например как в данной теме. |
| Автор: Akina 16.5.2012, 07:53 |
Уберите мой пост. После чего попробуйте найти направление, которое дали. Нашли? теперь оцените профессионализм этого направления. Только честно. |
| Автор: igorold 16.5.2012, 08:22 |
| Akina, понятно, что ваш совет профессиональнее, учитывая ваш богатый опыт. Если указано направление и можно с его помощью решить проблему - это плохо? На то и форум, чтобы предлагать разные решения ... не у всех большой опыт, так значит пусть не дают советы? Не боитесь, что один останетесь в ветке? |
| Автор: Zloxa 16.5.2012, 09:39 |
igorold, мне не понятно, к благодарности какому совету ты призываешь Не этого ли: Впрочем, я согласен с тем, что BuShaRt очень погорячился давать оценки способам решений. Это было грубоватенко. |
| Автор: Akina 16.5.2012, 10:46 | ||
Если с его помощью можно решить проблему, при этом любому понятно, что будет заведомо написан... выражусь политкорректно - монстрообразный нечитаемый медленно работающий неоптимальный код, который приведёт в ужас и начинающего, и специалиста,- это хорошо или плохо? |
| Автор: Zloxa 16.5.2012, 11:02 |
Akina, да ладно тебе. Выражение из семи when'ов кейса на монстрообразность нуникак не тянет. А лаконичность не всегда признак читаемости. Иные лаконичные выражения мозг взрывается читать. К слову заметить, если бы ТС хотяб попытался реализовать им желаемое грубым кейсом, думаю где-то на среде он уловил бы закономерность и сам пришел бы к более лаконичному решению. |
| Автор: igorold 16.5.2012, 12:00 | ||
Я не призываю к благодарности ... я предлагаю ярлычки не вешать ... |
| Автор: BuShaRt 16.5.2012, 12:03 | ||
Решительно не понимаю, почему в рамках этого обсуждения мой уровень знаний был воспринят как стремящийся к нулю =) Я изначально знал, что существует простои и лаконичное решение базирующиеся на MySQL функциях работы с датами, но в меру того, что у меня не набита рука в работе с этими функциями, я решил посоветовать с более опытными коллегами. Честно скажу, что не потому, что не в состояние разобраться, а в целях экономии времени на штудировани мана и продумывания решения для свидения нужных функций воедино. Как только Akina привел свой пример я заручившись поддержкой мануала за пару минут разобрался в нем и дополнил его недостающей логикой. Поэтому утверждая, что получив ответ Akina я упустил какой-то важный момент в обучение, Вы явно ошибаетесь. Уверен, что ответ Fortop не только не приблизил меня к ответу, но еще и запутал новичков, которые в следующий раз вместо того, чтоб обратиться к функциям работы с датой будут громоздить сложную логику запроса. |
| Автор: igorold 16.5.2012, 12:03 | ||
Если стоит принципиальный вопрос - решить проблему и она будет решена неоптимальным кодом, то это будет поводом его оптимизировать ... только и всего, но при этом программа уже будет давать результат ... |
| Автор: Zloxa 16.5.2012, 12:47 | ||||
Где я что-то подобное утверждал? Я лишь заметил, что прийти к этому решению не сложно, стоит лишь начать идти, пусть и изначально не в ту сторону.
Для того чтобы громоздить сложную логику, все равно придется обратиться к функциям работы с датами. Никого Fortop не запутал. Его ответ был просто ни о чем. И снисходительный тон, им выбранный, да - был не совсем уместен. Ровно как и не совсем уместной была ваша реакция на это. |
| Автор: igorold 17.5.2012, 14:27 | ||||
Для воскресений этот алгоритм не работает:
выдает следующую дату. Добавлено @ 14:34 Я так понимаю нужна другая функция:
Добавлено @ 14:35 BuShaRt, ты ведь не будешь говорить, что Akina тебя запутал? |
| Автор: BuShaRt 18.5.2012, 17:25 |
| igorold, =) Хм... Да, слона то я и не заметил... Огромное спасибо! |
| Автор: Fortop 19.5.2012, 19:42 |
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html Это сложно? Добавлено через 6 минут и 16 секунд Это утверждал я |
| Автор: Akina 20.5.2012, 22:06 | ||
Насчёт неверного выбора функции, дающего неуниверсальное решение - полностью согласен. Но осмелюсь сослаться на твои собственные слова:
Мой код сразу после устранения синтаксических недочётов начал давать правильный результат в рамках поставленной задачи. И лишь расширение области применения позволило выявить его недостаток и указать на необходимость его универсализации путём замены используемой функции. Так где я его запутал, а? |
| Автор: Fortop 20.5.2012, 22:15 |
Тебе на это ссылаться нельзя Просто потому что ты решил с некоторых пор стать адептом максимальной корректности решения. Так что оправдывайся теперь. |
| Автор: igorold 21.5.2012, 06:13 | ||||||
Akina, зачем же вы выдираете слова из контекста? Моя фраза была такая:
Причем открою большой секрет - в этой фразе содержится юмор ... легкий сарказм ...
Насчет остального вы лукавите. Ваш запрос дает правильный результат в рамках поставленой задачи, НО только для 6-ти случаев из 7. И мое тестирование выявило ошибку для 1 случая из 7, что означает, что все-таки полностью проблема не была решена. Если вы это называете недостатком, ну ладно ... И к чему эти длинные разборки? был вопрос, нашли решение ... для этого и существует форум ... всем спасибо, все свободны ... |
| Автор: Akina 21.5.2012, 08:00 | ||||||
Для 100 случаев из ста. Понедельник ВСЕГДА определяется правильно - а именно так была поставлена задача. Её расширение на любой день недели - это вовсе не топикстартером инициировано. Это - Ваше расширение. И с ним получается совсем иная задача. Тыкать мне то, что решение для одной задачи не подходит для другой - мне кажется как минимум некорректным.
Угу. Из неё даже невозможно понять, отрицающий это вопрос или утверждающий. Это я как-нибудь сам решу, без советов со стороны.
В рамках поставленной задачи - всегда. И мне никогда не придёт в голову посоветовать сострогать какое-нить многоэтажное безобразие, если есть хоть какой-то шанс сделать это иным способом. В отличие от [slack skipped]. |
| Автор: igorold 21.5.2012, 08:34 |
| Akina, в таком случае вы неправильно поняли вопрос топикстартера. Он просил определить дату понедельника для любой даты недели, в который входит введенная дата. Согласен, что понедельник определяется ВСЕГДА, но для воскресений он уже относился к следующей неделе, что противоречит заданной проблеме ... Мне очень понравилось ваше решение и я даже поизучал его, чтобы понять как это работает ... извините, что нашел ошибку ... с кем не бывает ... |
| Автор: Zloxa 21.5.2012, 08:41 |
А как же - поговорить © Добавлено через 1 минуту и 46 секунд А реплика была адресована мне. На то я и пытался указать, задавая этот вопрос. |
| Автор: Akina 21.5.2012, 09:49 |
Это как раз очень хорошо - в результате получено универсальное решение. Но основание для его поиска - моё предложение, а не предложение наплодить кучу вложенных кейсов. Всё-таки... |
| Автор: igorold 21.5.2012, 12:37 | ||
... ну да ... |