Форум: "Базы";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
ВнизКак в MSSQL в SQL работать с датами Найти похожие ветки
← →
ol (2002-02-07 16:05) [0]Писал под ORACLE, никогда не возникало проблем с датами
Подскажите, в базе дата формата 01.01.01, делаю запрос
select w,e,r
from dfdfd
where data between "01.01.02" and "29.01.02"
Выдает данные и за 2001 год и за 02 месяц этого года,
может эту дату как-то конвертить нужно?
← →
handra (2002-02-07 16:42) [1]Касательно MSSQL, есть 2 варианта:
1. Писать дату в стандартном формате (по умолчанию):
"2002-01-30" - 30 января 2002 года, т.е. ГГГГ-ММ-ДД
2. Использовать ф-ю CONVERT с указанием привязки формата даты:
select CONVERT(char(10),getdate(),104), CONVERT(datetime,"07.02.2002",104)
здесь используются локальная страница 104, что соответствует формату ДД.ММ.ГГГГ, т.е. в твоем случае:
select w,e,r
from dfdfd
where data between CONVERT(char(10),"01.01.02",104) and CONVERT(char(10),"29.01.02",104)
← →
ol (2002-02-07 17:12) [2]>where data between CONVERT(char(10),"01.01.02",104) and CONVERT
>(char(10),"29.01.02",104)
результат не изменился есть и второй месяц и 2001 год
я извратился но это через одно место
пооддельности сравниваю день,месяц,год но работает в два раза дольше
← →
wicked (2002-02-07 17:18) [3]2 ol
поле data какого типа?..... если типа datetime, тогда надо писать convert( DATETIME, "29.01.2002", 104).... или convert( DATETIME, "29.01.02", 4)... обрати внимание на форматы даты и число (4 или 104)... если год - 2 разряда, то надо использовать 4, если в году 4 разряда, то 104....
← →
wicked (2002-02-07 17:22) [4]кстати, по моим личным наблюдениям (специально не проверял), запись даты в виде строки "yyyy-mm-dd" работает только из под mssql"евского query analyzer"а.... во всех остальных случаях надо писать convert(...)
← →
wicked (2002-02-07 17:23) [5]кстати, по моим личным наблюдениям (специально не проверял), запись даты в виде строки "yyyy-mm-dd" работает только из под mssql"евского query analyzer"а.... во всех остальных случаях надо писать convert(...)
← →
ol (2002-02-07 17:26) [6]>convert(DATETIME, "29.01.02", 4)... обрати внимание на форматы
>даты и число (4 или 104)... если год - 2 разряда, то надо
>использовать 4, если в году 4 разряда, то 104....
Server: Msg 241, Level 16, State 1, Line 1
Syntax error converting datetime from character string.
:-(((
← →
wicked (2002-02-07 17:32) [7]2 ol
напиши свой запрос....
← →
ol (2002-02-07 17:39) [8]select w.ev_day,q.subdivid,q.family,q.name,q.Patronymic,w.ev_time ,
w.dat_tek,w.TKD_MAKEADR,w.EV_DAY
from userinf q, events w
where q.cardid=w.ev_cardid
and q.family="Пустовойт" and q.name="Олег" and
w.dat_tek between CONVERT(DATETIME,"01.01.02",104) and CONVERT(DATETIME,"29.01.02",104)
← →
wicked (2002-02-07 17:46) [9]2 ol
ну, я ж написал - "если год - 2 разряда (29.01. 02), то надо использовать 4 - convert(datetime, "29.01.02", 4), если в году 4 разряда (29.01. 2002), то 104 - convert(datetime, "29.01.2002", 104)"....
← →
ol (2002-02-07 17:50) [10]сорри
но и при "4" ничего не отгребло
я сделал так
(datepart (yy,w.dat_tek) between datepart (yy,"01.01.02") and datepart (yy,"20.01.02")) and
(datepart (mm,w.dat_tek) between datepart (mm,"01.01.02") and datepart (mm,"20.01.02")) and
(datepart (dd,w.dat_tek) between datepart (dd,"01.01.02") and datepart (dd,"20.01.02"))
← →
wicked (2002-02-07 17:57) [11]2 ol
ну твой способ имеет недостаточек - трудно отлавливаемые ошибки.... а насчёт convert"а - глянь в transact sql help.... там всё классно расписано....
← →
Fay (2002-02-08 02:36) [12]where data between "2002.01.01 00.00.00.000" and
"2002.01.29 00.00.00.000"
← →
kserg@ukr.net (2002-02-08 10:48) [13]По сути вопроса хочу поделиться с народом своими наблюдениями.
(Кстати он обсуждался здесь пару месяцев назад).
Я тоже сталкнулся с этой проблемой - не мог понять, вроде в виндах в региональных установках стоит формат ddmmyy, а MSSQL -
- кроет меня матом.
Оказалось, что MSSQL начхать на виндовские установки и его формат даты по умолчанию - mmddyy.
А я упорно пытался вставить ddmmyy...
Решение проблемы -
или использовать парметрические запросы, где
этот конфликт улаживается сам собой,
или сметить этой самый DEFAULT на нужный
По этому поводу ниже привожу выдержку из форума
------------------------------------------------
Cуществует системная таблица master.dbo.syslanguages
в которой хранятся региональные установки, как-то:
формат даты, список названий месяцев, дни недели и т.п.
Информацию об этом можно получить командой
exec sp_helplanguage
или exec sp_helplanguage "русский" - для русского яз. соответственно.
Для установки конкретному логину своих региональные установок используется следующее: exec sp_defaultlanguage "sa", "русский"
Если надо установить региональные установки для всего сервера
то делать надо так:
exec sp_configure "default language", 21
где 21 - langid из syslanguages,
однако последняя операция, довольно опасна и делается,
как правило, автоматически и один раз - при инсталяции MSSQL.
--------------------------------------------------
Далее, к сожалению мне так и не удалось реализовать
через смену установки даты конкретному логину.
(народ, кто может - проверьте ещё раз, может выйдет?)
Поэтому я поступил след.образом:
так сказать "метод в лоб" -
на TADOConnection на событие AfterConnect выполняю:
quTemp1.SQL.Clear;
quTemp1.SQL.Add("SET DATEFORMAT dmy");
quTemp1.ExecSQL;
quTemp1.close;
Всё работает - и теперь у меня нет проблем с датами.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.03.07;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c