Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Базы данных MySQL

  Все выпуски  

RusFAQ.ru: Базы данных SQL


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Базы данных SQL

Выпуск № 260
от 10.06.2007, 01:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 434, Экспертов: 62
В номере:Вопросов: 1, Ответов: 2


Вопрос № 90040: Здравствуйте. Помогите, пожалуйста, разобраться со сравнением дат в MS SQL Server 2000. Предположим, есть таблица teachers. В ней поля: tnum - int (ключ) tfam – varchar (фамилия) tdate – smalldatetime (хранится дата приёма на работу)<...

Вопрос № 90.040
Здравствуйте. Помогите, пожалуйста, разобраться со сравнением дат в MS SQL Server 2000.
Предположим, есть таблица teachers. В ней поля:
tnum - int (ключ)
tfam – varchar (фамилия)
tdate – smalldatetime (хранится дата приёма на работу)

Мне нужно фамилию тех людей, которые были приняты на работу, скажем, не позже сентября 1997.
Пытаюсь сделать это примерно так:
Select t.tnum, t.tfam
From teachers t
where t.tdate<CONVERT(datetime, '01.09.1997', 102)

Но в этом случаи, получается, вернуть только тех людей, которые были приняты на работу до 1997 года. А если человек принят, допустим 10.03.1997, то он не попадает в выборку этого запроса.

Расскажите, пожалуйста, почему так происходит и как должен выглядеть правильный запрос в моём случае?
Отправлен: 05.06.2007, 01:07
Вопрос задал: Martin (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Esi
Здравствуйте, Martin!
Лично я храню даты в полях с типом datetime. и у меня не возникало проблем с выборкой. Предлагаю это сделать и в условии (where) поменять 102 на 104.
Перед этим задать формат даты: set dateformat to dmy
Ответ отправил: Esi (статус: 2-ой класс)
Ответ отправлен: 05.06.2007, 06:31
Оценка за ответ: 5

Отвечает: Виктор Пырлик
Здравствуйте, Martin!
Вы используете локаль, при приведении типов – 102, в соответствии с этой локалью, формат должен быть ‘yy.mm.dd’. В целом, использование формата вывода не однозначно реализуется в SQL Server Enterprise Manager, SQL Query и в приложениях.
Если вы измените на 104, то всё будет нормально, или поменяйте местами месяц и день.
В данном случае, нет необходимости делать явное приведение типов – достаточно например так:
Select tnum, tfam
From teachers
where tdate < '01.09.1997'


---------
Надо пребывать господа, пребывать! Иначе ничего не получится!
Ответ отправил: Виктор Пырлик (статус: 3-ий класс)
Ответ отправлен: 05.06.2007, 13:26
Оценка за ответ: 5
Комментарий оценки:
Спасибо за помощь


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

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


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное