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

Откуда:
Сообщений: 111
Есть выборка данных, одна из колонок дата

select distinct EO.EOCode as 'Код ОУ', 
                ....,
		[b]convert (varchar(30), PED.IssueDate, 104) as 'Дата выдачи дипломов',[/b]
                ....
		from dbo.EducationOrganization as EO
		inner join PrimaryEducationDocuments as PED on EO.ID = PED.EduOrgId
                [b]where PED.IssueDate = @year[/b]
		order by EO.FullName ASC 


как Вы видите условием выборки является, что бы дата была определенной, но дело в том что параметр вводится в виде например: 2011

а дата лежит в виде 01.01.2011

так вот как бы по симпатичнее оформить условие?

есть идея по введенному году задать начальную и конечную даты и сделать between но больно криво кажется.....
19 сен 13, 17:51    [14860962]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
lynatik50
есть идея по введенному году задать начальную и конечную даты и сделать between но больно криво кажется.....
Правильно - не between, а >= и <

lynatik50
а дата лежит в виде 01.01.2011
Надеюсь, дата лежит не в строке?
19 сен 13, 17:54    [14860991]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
А что вам мешает сделать типа

...
DATEPART(yyyy,PED.IssueDate)=@year
..
19 сен 13, 17:55    [14860998]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
lynatik50
Member

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

нет не в строке в datetime
19 сен 13, 17:56    [14861004]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
lynatik50
Member

Откуда:
Сообщений: 111
Сергей Викт.
А что вам мешает сделать типа

...
DATEPART(yyyy,PED.IssueDate)=@year
..



круто спасибо!!!!!
19 сен 13, 17:59    [14861027]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Сергей Викт.
А что вам мешает сделать типа

...
DATEPART(yyyy,PED.IssueDate)=@year
..

Это не позволит использовать поиск по индексу по дате.
19 сен 13, 18:01    [14861036]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Мистер Хенки
Сергей Викт.
А что вам мешает сделать типа

...
DATEPART(yyyy,PED.IssueDate)=@year
..

Это не позволит использовать поиск по индексу по дате.

Кто ж спорит:)
Вопрос был про условие, предложено как вариант.
19 сен 13, 18:03    [14861054]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31442
Сергей Викт.
А что вам мешает сделать типа

...
DATEPART(yyyy,PED.IssueDate)=@year
..
Но лучше использовать условие по диапазону >= и <
19 сен 13, 18:48    [14861226]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3618
Мистер Хенки
Сергей Викт.
А что вам мешает сделать типа

...
DATEPART(yyyy,PED.IssueDate)=@year
..

Это не позволит использовать поиск по индексу по дате.

если там выбираются данные за ЦЕЛЫЙ ГОД.... боюсь это надо чтобы там данные за 200 лет лежали, чтобы B-tree индекс селективен оказался
19 сен 13, 19:06    [14861317]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Ivan Durak
если там выбираются данные за ЦЕЛЫЙ ГОД.... боюсь это надо чтобы там данные за 200 лет лежали, чтобы B-tree индекс селективен оказался

Если это покрывающий индекс с первым столбцом IssueDate, то он может быть эффективно использован независимо от селективности :-)
19 сен 13, 19:20    [14861366]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
hallabud
Member

Откуда: Киев
Сообщений: 245
alexeyvg
Правильно - не between, а >= и <

а чем BETWEEN плохо?
19 сен 13, 19:32    [14861407]     Ответить | Цитировать Сообщить модератору
 Re: Как бы по симпатичнее это сделать?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
hallabud
alexeyvg
Правильно - не between, а >= и <

а чем BETWEEN плохо?

Тем, что дата в общем случае хранится с временем. Которое может быть максимально равно 23:59:59.997 для типа данных datetime, 23:59:59.9999999 для типа данных datetime2(7) и т.д.
19 сен 13, 20:02    [14861478]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить