Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

выбор значения из поля типа TimeStamp с помощью Case [FB1.5]


VadimKV ©   (2004-10-21 16:08:00) 

Среда FB1.5 (Dialect 3), IBExpert.
Подскажите кто знает. Почему если выбирать значение из поля типа TimeStamp обычным способом, то значение отабражается так же как в Grid. А если выбирать тоже самое поле через Case, то формат отабражения даты меняется.
В меню Environment Options -> Grid -> Displai Format (IBExpert) установлено dd.mm.yyyy hh:mm.

Пример:   обычно     - 08.09.2004 00:00,
Dialect3  через Case - 2004-09-08 00:00:00.0000
Dialect1  через Case - 8 aug 2004 (в данный момент не интересует)

select               r.createddate
      ,case
      when sys.rdb$field_name = 'CREATEDDATE'
           then     r.createddate
... ... ...
и т.д.


Johnmen   (2004-10-22 09:35:00) [1]

Похоже у тебя серьезные проблемы с проектированием.
Рекомендую в этом направлении решать проблемы...


VadimKV   (2004-10-22 09:31:00) [2]

Нужно это для того, что бы данные хранились в одинаковом виде.
Пример поля типя TimeStamp  заполняются  в виде
'1.10.2004', делая запрос select fldTimeStamp ... будет возвращено значение '1.10.2004'.
Если Я делаю какие либо обработки данных запросом вида
   insert into ...
   select case
     when sys.rdb$field_name = 'CREATEDDATE' then r.createddate
     when sys.rdb$field_name = 'NAMEREF'     then r.nameref
... ... ...
, то в БД данные будут храниться ввиде '2004-09-08', это же значение далее будет возвращать Select ...


Johnmen   (2004-10-22 09:20:00) [3]

Ну что тут непонятного ? Всё очевидно !
И вообще, зачем это тебе ?


VadimKV   (2004-10-22 09:17:00) [4]

THEN CAST(... AS TIMESTAMP)
Так я уже пробавал пробавал, не помагает.

Есть конечно крайний вариант через Extract(...).
Но все равно не понятно почему так происходит, и можно ли вообще это исправить.


Johnmen   (2004-10-22 09:13:00) [5]

Хотя можешь попробовать
THEN CAST(... AS TIMESTAMP)
THEN CAST(... AS TIMESTAMP)


Johnmen   (2004-10-22 09:11:00) [6]

>поля разных типов.

Вот ты и сам ВСЁсказал !

Про исх. коды была шутка...:)


VadimKV   (2004-10-22 09:08:00) [7]

Весь Case, взять в cast не могу, потомучно много when и поля разных типов.
r.createddate  timestamp
r.nameref      varchar, integer и т.д.

А точно, что нужно зделать с этой фичей неизвестно?
Честно, в исходных кодах, Я незнаю что искать и что там править.
Если можите подсказать, то большое спасибо.
Кто муже, почему в исходных кодах IBExpert, ведь эту настройку должен хранить сервер FB1.5 наверное.


Johnmen   (2004-10-21 17:27:00) [8]


> VadimKV   (21.10.04 16:45) [3]


1.
>Весь Case, взять в cast не могу, потомучно много

Ну что ? Как "множество" влияет на "невозможность" ?

2.
>r.createddate
>r.nameref

Какого типа поля ?

3.
>Когда и как его можно определить ...

Так это фича программы под назв. IBExpert. См. её исх.коды :)))


VadimKV   (2004-10-21 16:45:00) [9]

Sandman25Весь Case, взять в cast не могу, потомучно много
... ... ...
when sys.rdb$field_name = 'CREATEDDATE' then r.createddate
when sys.rdb$field_name = 'NAMEREF'     then r.nameref
... ... ...

Johnmen- "А когда он уже определен...".
Когда и как его можно определить нужным образом, что бы Case выводил этот тип нормально?


Sandman25   (2004-10-21 16:25:00) [10]

cast(case (...) as НУЖНЫЙ ТИП)


Johnmen   (2004-10-21 16:25:00) [11]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо