Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DateDiff date format проблема с выводом, проблема с выводом 
V
    Опции темы
ekodrive
  Дата 8.7.2014, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 4.1.2006

Репутация: нет
Всего: 0



Добрый день друзья. Такая ситуация имеется user,ddeadline,do_date_t в базе
------------------------------------------
user |   deadline    |   do_date_t |
------------------------------------------
     1 |31.07.2013   |   09.01.2014 |
     2 |31.05.2013   |   15.07.2013 |
     3 |01.12.2011   |   01.11.2011 |
     4 |06.11.2012   |   05.05.2012 |
     5 |31.07.2013   |   02.12.2013 |

deadline-это последний срок задания, do_date_t-это день выполнения заданий.

для пользователя под номером 1 последний день задания в 31.07.2013 но он опоздал и сделал задание 09.01.2014, а пользователь под номером 4 сделал вовремя. Вот задача в том что нужен запрос который выводить только список опоздавших. Пробовал так 
Код

SELECT user,deadline,do_date_t FROM test WHERE  DATEDIFF(`deadline`,`do_date_t`) >0


но не работает причина думаю в том что datediff оператор работает с форматами year month day a у меня day month year. Как быть ?
Заранее скажу вариант изменить формат даты в базе не уместен так как количество данных много.
--------------------
Смерть-Это только начало!!!
PM MAIL WWW ICQ   Вверх
AVA12
Дата 8.7.2014, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: нет
Всего: 4



В принципе, можно сконвертировать строку в дату с помощью STR_TO_DATE(`имя`, '%d.%m.%Y'). Но ведь базе данных придется конвертировать каждую дату для каждой записи при каждом поиске. Строить индекс и сравнивать даты как строки - бессмысленно. Выбор именно такого формата даты изначально был решением из разряда "уронить на ногу ядерную бомбу". Так что менять формат и использовать тип DATE, однозначно.
PM ICQ Jabber   Вверх
Aliance
Дата 8.7.2014, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



ekodrive, какой тип у столбцов-то? varchar что ли?
PM MAIL WWW ICQ Skype   Вверх
ekodrive
Дата 8.7.2014, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 4.1.2006

Репутация: нет
Всего: 0



Цитата(Aliance @ 8.7.2014,  15:54)
ekodrive, какой тип у столбцов-то? varchar что ли?

да varchar так как вся информация был импортирован из excel
--------------------
Смерть-Это только начало!!!
PM MAIL WWW ICQ   Вверх
Aliance
Дата 8.7.2014, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



ekodrive, вам все еще нужен ответ или теперь самому стало понятно? если вы хотите хранить дату и пользоваться функциями для дат - нужно поле в соотв. формате. если вы его храните через одно место - то и доступа к функциям у вас не будет.
PM MAIL WWW ICQ Skype   Вверх
ekodrive
  Дата 9.7.2014, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 4.1.2006

Репутация: нет
Всего: 0



Aliance, Да вы правы. Ну изменить формат поля не смогу
Код

SELECT id,planned,realn  FROM `baza` WHERE DATEDIFF(STR_TO_DATE (planned,'%d.%m.%Y'), STR_TO_DATE (realn,'%d.%m.%Y'))<0

и вроде работает норма. Спасибо вам огромное за помощь. 
AVA12 и Aliance
--------------------
Смерть-Это только начало!!!
PM MAIL WWW ICQ   Вверх
Aliance
Дата 9.7.2014, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: нет
Всего: 137



ekodrive, честно говоря, лучше все же переконвертить. Конверт поля займет какое-то конечное время T, а конверт на лету каждый раз будет линейно расти с кол-вом вызовов запроса (Q*N), что на дальней дистанции съест вам куда больше ресурсов.
PM MAIL WWW ICQ Skype   Вверх
igorold
Дата 10.7.2014, 11:58 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

Репутация: нет
Всего: 17



а если попробовать:
Код


where TO_DAYS(concat(substring(do_date_t,7,4),'-', substring(do_date_t,4,2),'-', substring(do_date_t,1,2))) > TO_DAYS(concat(substring(deadline,7,4),'-', substring(deadline,4,2),'-', substring(deadline,1,2)))


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
AVA12
Дата 10.7.2014, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 4.5.2008

Репутация: нет
Всего: 4



igorold, автор темы уже стоит в гамаке на лыжах, а ты еще предлагаешь скафандр надеть?
PM ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1229 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.