Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выбора по дате и времени  [new]
Mitresky
Member

Откуда: Раменское
Сообщений: 52
Нужно реализовать выборку всех документов с датой регистрации > 16:00. Как это можно сделать? Подкиньте идей..

Subj DateReg
тест1 20.10.2012 16:09
тест2 11.11:2012 15:00
тест3 21.11.2012 22:30
_________________________
Результат
тест1 20.10.2012 16:09
тест3 21.11.2012 22:30
27 ноя 12, 12:01    [13535062]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
Crimean
Member

Откуда:
Сообщений: 13147
банально - хранить время отдельно
27 ноя 12, 12:05    [13535117]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
kryak
Member

Откуда:
Сообщений: 396
Crimean,

Еще банальней

DATEPART(HOUR, DateReg) > 16

Ну или если у вас 2008 то CAST(DateReg AS TIME) > '16:00:00'

Но все это не сильно оптимальные условия для WHERE....

Лучше конечно хранить отдельно
27 ноя 12, 12:20    [13535264]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
aleks2
Guest
kryak
Crimean,

Еще банальней

DATEPART(HOUR, DateReg) > 16

Ну или если у вас 2008 то CAST(DateReg AS TIME) > '16:00:00'

Но все это не сильно оптимальные условия для WHERE....

Лучше конечно хранить отдельно

- Армяне лучше, чем грузины!
- Чем лучше?
- Чем грузины!

Для организации прыткой выборки в таком случае, достаточно таблицы дат или натуральных чисел.

select *
from [документов]  D inner join (select @DateFrom+Number-1 as Date from Numbers where Number between 1 and @TotalDays) X
on D.DateReg>=dateadd( hour, 16, X.Date) and D.DateReg<X.Date+1
27 ноя 12, 12:28    [13535342]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
kryak
Member

Откуда:
Сообщений: 396
aleks2,

вы и впрям думаете, что данная конструкция будет быстрее нежели обычный DATEPERT? сильно сомневаюсь
27 ноя 12, 12:35    [13535396]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
aleks2
Guest
kryak
aleks2,

вы и впрям думаете, что данная конструкция будет быстрее нежели обычный DATEPERT? сильно сомневаюсь

Ну сомневайся дальше.
27 ноя 12, 12:38    [13535421]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
Добрый Э - Эх
Guest
kryak,

одно дело - применять преобразования к чему-попало, другое дело - к индексированному столбцу. Преобразование по индексированному столбцу (предложенный тобой DATEPART) напрочь отобьют у сервера желание использовать индекс. Преобразование же констант и сравнение их с индексированным столбцом (вариант от aleks2) - вполне позволяет серверу использовать индекс для доступа к данным.
27 ноя 12, 12:40    [13535436]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
Crimean
Member

Откуда:
Сообщений: 13147
kryak
aleks2,

вы и впрям думаете, что данная конструкция будет быстрее нежели обычный DATEPERT? сильно сомневаюсь


а вы проверьте. ваш вариант будет сканить всегда и все. вариант aleks2 будет работать по индексу
одно "но" - варианты будут условно эквивалентны при выборке "за все даты"
чем меньше дат тем вариант aleks2 будет эффективнее
при условии индексирования указанного поля, конечно
27 ноя 12, 12:41    [13535448]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
Mitresky
Member

Откуда: Раменское
Сообщений: 52
kryak
Crimean,

Еще банальней

DATEPART(HOUR, DateReg) > 16

Ну или если у вас 2008 то CAST(DateReg AS TIME) > '16:00:00'

Но все это не сильно оптимальные условия для WHERE....

Лучше конечно хранить отдельно


Спасибо. Получится только данный код. К серверу у меня нет доступа..!
27 ноя 12, 12:42    [13535456]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Mitresky,

DateReg > convert(datetime,floor(convert(float,DateReg)) + 0.666666666666667)
and DateReg < convert(int, DateReg) + 1
27 ноя 12, 15:20    [13537147]     Ответить | Цитировать Сообщить модератору
 Re: Выбора по дате и времени  [new]
Crimean
Member

Откуда:
Сообщений: 13147
вам, грубо, нужно выбрать 1% данных или 99% данных?
если 99% данных - не парьтесь особо, используйте datepart
если 1% - то имеет смысл сделать то, о чем писал aleks2
27 ноя 12, 15:53    [13537439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить