SQL и дата
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



SQL и дата Expand / Collapse
Автор
Сообщение
19.07.2006 13:55
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 20.09.2007 9:51
Сообщ.: 56, Visits: 90
Здравствуйте. Не подскажите как в запросе мне надо переделать дату, чтобы он работал, при вводе даты обычного формата.

Например: select * from [table]

               where [data] ='01.02.06', пока он ничего не выводит, там ведь формат даты день.месяц.год часы.минуты.секунды.

Заранее спасибо.

Сообщ. #901016
19.07.2006 14:25
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

администратор
Last Login: 13.11.2007 13:41
Сообщ.: 4 421, Visits: 49 251
формат это то как ты видишь дату а не как она там хранится

раз время не указываешь, значит подразумевается 00:00:00, так что условие надо делать выбором между предыдущей и следующей датой, чтобы в результат вошли все записи от 00:00 до 23:59

Сообщ. #901017
19.07.2006 14:26


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
Ну значит у тебя нет данных, соответствующих этому времени, т.е. '01.02.06 00:00:00.000'.

Если тебя интересуют данные за день, то есть два варианта:

1) Делать выборку с изначальным конвертированием поля даты со временем в дату (т.е. обрезая время). Как - смотрю в FAQ на SQL.RU. Но это очень неэффективный способ.

2) Указывать интервал. Т.е. Between '01.02.06 00:00:00' and '01.02.06 23:59:59.999'

Сообщ. #901019
19.07.2006 14:37
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Я бы сделал так - select * from [table] where datediff(dd, [data], convert(datetime, '01.02.06', 104)) = 0
Сообщ. #901020
19.07.2006 14:47


Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 29.10.2007 14:45
Сообщ.: 1 833, Visits: 16 863
Так индексы использоваться не будут.
Сообщ. #901022
19.07.2006 15:18
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Верно, индекс по полю в случае с DATEDIFF/CONVERT использоваться не будет. Если это критично, то тогда надо использовать вариант c between.

Метод с использованием DATEDIFF советовался к использованию в одной из статей на MSDN посвященной эффективной работе с датами на SQL Server, поэтому я ее и привел.

Сообщ. #901029
20.07.2006 8:52
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 20.09.2007 9:51
Сообщ.: 56, Visits: 90
Спасибо все большое за советы, наверное всеткиж сделаю c between.
Сообщ. #901086
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 10:09