Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-19280
Andrey Lutsenko
2001-12-10 05:58
2002.03.07
OS Version of remote comp


6-19292
iXANiA
2001-12-19 11:17
2002.03.07
Как организовать SPX соединение под WIN32


14-19348
Сержик
2002-01-24 15:59
2002.03.07
А чё, правда, что Delphi6 на русском языке бывает?


3-19060
DarkDv
2002-02-08 04:55
2002.03.07
Простой каверзный вопросик... (+)


1-19161
IronHawk
2002-02-21 13:47
2002.03.07
Вопрос к многоуважаемым Мастерам ! Как лучше реализовать ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский