Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хранится в виде 'число.месяц.год', а запрос другой, MS SQL SERVER 2000 
:(
    Опции темы
pavelv
Дата 21.1.2007, 07:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Здравствуйте.
 Недавно начал работать с MS sql server 2000 и столкнулся с такой проблемой.
Если создать таблицу TEST с двумя полями:
Nomer :int и date_d:datetime.
И вводить в неё информацию через SQL SERVER Enterprise manager, то она сохраняется в таком виде:
Nomer  Date_d
   1       14.01.2007.

Но при выводе записи по дате:
select * from TEST where date_d='14/01/2007' возникает ошибка в виде 'couldn't convert...'. А связано это с тем, что в базе данных информация о дате хранится в виде год.месяц.число(если сделать select * from TEST).

Тоесть запрос:
select * from TEST where date_d='2007/01/14' сработает.

Вопрос: Можли ли сделать так, чтобы дата при просмотре в интерпрайз мэнэджере отображалась в том же виде как она хранится в базе. Привыкнуть не проблема, но непонятно с чем связано такое несогласование. 

P.S> Не исключаю возможности, что дело в самом ентерпрайз мэнэджере smile.

PM MAIL   Вверх
boevik
Дата 21.1.2007, 08:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Если поле объявлено как datetime, то в базе оно хранится в формате datetime.
Весь вопрос, как с ним работать.
К примеру, можно обратиться таким образом (format 'yyyy-mm-dd'):
Код

select * from TEST where date_d='2007-01-14' 

или американский формат (default format)
Код

select * from TEST where date_d='01/14/2007' 

Ну а если хочется работать с форматом dd/mm/yyyy, то следует явно указать серверу:
Код

SET DATEFORMAT dmy
select * from TEST where date_d='14/01/2007' 


Цитата(pavelv @  21.1.2007,  07:56 Найти цитируемый пост)
Вопрос: Можли ли сделать так, чтобы дата при просмотре в интерпрайз мэнэджере отображалась в том же виде как она хранится в базе. Привыкнуть не проблема, но непонятно с чем связано такое несогласование. 

Это не несогласование, это feather
Enterprise Manager это client program которая отражает даты и другие данные в соотвествии настроек клиентского компютера.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
pavelv
Дата 21.1.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Ок, спс. Про dateforamt не знал, может есть у кого компактный хелп?
PM MAIL   Вверх
speshi
Дата 21.1.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 24.11.2006
Где: София

Репутация: нет
Всего: нет



USE ANSI 

select * from TEST where date_d='20070114'  &&& ГГГГММДД
PM MAIL WWW   Вверх
RST8
Дата 25.1.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 232
Регистрация: 8.12.2004

Репутация: нет
Всего: 1



Цитата(boevik @  21.1.2007,  08:43 Найти цитируемый пост)
SET DATEFORMAT dmy


1. До каких пор действует эта команда, только на один запрос? Тогда прийдется это всегда добавалять к select-у.
2. Есть два установленных сервера, один из них воспринимает даты в виде дмг, а другой мдг. От чего это зависит? Ставильсь вроде одинаково. Можно ли это изменить где либо в настройках сервера?
3. Каков лучший и правильный способ что написание прграммы что бы она коректно работала с датой, независимо от настроек сервера?

--------------------
Посадка, с места которой можно уйти на собственных ногах, считается удачной!
PM   Вверх
ТоляМБА
Дата 26.1.2007, 08:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



Цитата(RST8 @  25.1.2007,  20:16 Найти цитируемый пост)
3. Каков лучший и правильный способ что написание прграммы что бы она коректно работала с датой, независимо от настроек сервера?



Цитата

2)При передаче даты и времени. Тут прикол вот в чём. Допустим стоит у вас SQL Server в США и использует формат времени и даты как "01/20/04 1PM", а клиент у вас работает один в Канаде где формат даты "20/01/04 01:00 PM", а другой в России где формат даты "20/01/04 13:00". При отсылке запроса с датой в виде строки надо обязательно согласовывать форматы даты времени клиента и сервера, а при передаче параметров не надо! Дело в том что преобразование параметра происходит на сервере, и сервер его сам преобразует в тот формат который ему нужен!

Код

ADOQuery1.Active:=False;
ADOQuery1.SQL.text:='Select * From MyTable Where LastDate>:prm';
ADOQuery1.Parameters.ParseSQL(ADOQuery1.SQL.text, true);
ADOQuery1.Parameters.ParamByName('prm').Value:=now;
ADOQuery1.Active:=True;

 



source
 


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.