Вопрос № 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 Комментарий оценки: Спасибо за помощь