Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.24;
Скачать: CL | DM;

Вниз

Помогите написать запрос на select   Найти похожие ветки 

 
greg123   (2008-09-11 17:51) [0]

Подскажите пожалуйста как написать запрос на выборку уз таблицы T1, у которой есть 2 поля месяц и год - оба smallint.
Необходимо отобрать только те записи, у которых диапазон этих полей от декабря 2006 до января 2007.

select FAM,IM,OTCH from T1
where ((rollyear>=2006 and rollmonth>=12) and (rollyear<=2007 and rollmonth<=1)) - не работает :(

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


 
Правильный$Вася   (2008-09-11 17:54) [1]


>  не работает

естественно, т.к. rollmonth>=12 аnd rollmonth<=1 противоречат друг другу


 
DrPass ©   (2008-09-11 17:55) [2]

rollyear * 100 + rollmonth >= 200612 and rollyear * 100 + rollmonth <= 200701


 
DrPass ©   (2008-09-11 17:56) [3]

вернее, rollyear * 100 + rollmonth between 200612 and 200701


 
Правильный$Вася   (2008-09-11 18:01) [4]


> DrPass ©   (11.09.08 17:56) [3]

интересно, к какому типу будет приведен результат
smallint маловат будет...


 
greg123   (2008-09-11 18:05) [5]

Большое спасибо, всё заработало (всё работает без приведения типа)


 
Ega23 ©   (2008-09-11 18:10) [6]


> rollyear * 100 + rollmonth


Оригинально. Буду иметь ввиду. Спасибо.


 
Правильный$Вася   (2008-09-11 18:30) [7]


> Оригинально

очень старый трюк
особенно для тех, кто работал с DBF


 
Anatoly Podgoretsky ©   (2008-09-11 18:53) [8]

Личные извращения над датами, до добра не доводят.
Автор в любой СУБД есть тип ДАТА


 
DrPass ©   (2008-09-11 23:27) [9]


> Anatoly Podgoretsky ©   (11.09.08 18:53) [8]

Такая разбивка может иметь смысл - например, если он часто строит выборки с разбивкой по месяцам. В этом случае будет эффективнее хранить год/месяц отдельно, чем каждый раз выцеплять его из даты


 
sniknik ©   (2008-09-12 01:24) [10]

> Такая разбивка может иметь смысл - например, если он часто строит выборки с разбивкой по месяцам.
не очень большой смысл, т.к. в MSSQL есть более нормальный вариант.
при "разобранной" дате ее придется "собирать" для отображения, периоды отбирать с мелкими, но проблемами, вроде той что в этой ветке, а если ввести дублирующее поле с датой тогда будут другие с вводом и синхронизацией.

в нормальном варианте потребуется только одно поле с датой, а для выборок по месяцам ввести вычисляемое(т.е. собственно поля нет, значение вычисляется при обращении) поле с индексом (там есть переключатель котрый позволяет построить индекс по "воздуху")... тогда, если поле не отображать, не обращаться к нему (а вроде и незачем, отображать только нормальную дату), не будет пересчета на выборках, но при вносе/изменении все само синхронизируется, а для выборок используется индекс, а не значение, т.е. группировка/разбивка по месяцам будет максимально быстрой т.к. по индексу.
т.е. эффективнее эффективности только эффективность без гемороя... что и дает 2-й вариант.



Страницы: 1 вся ветка

Текущий архив: 2009.05.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
2-1239162302
Alex34
2009-04-08 07:45
2009.05.24
День недели в DateTimePicker


11-1200620819
Jon
2008-01-18 04:46
2009.05.24
Conversions


10-1157968431
silversmith
2006-09-11 13:53
2009.05.24
Ерунда при работе с Word.Application


11-1200936173
Ash-911
2008-01-21 20:22
2009.05.24
Добавление пути в дерево


2-1239262531
kyn66
2009-04-09 11:35
2009.05.24
Проверка открытия базы на сервере