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

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

Конвертация даты в строку на SQL сервере [D5, MSSQL]


Котяра ©   (2003-07-01 14:01:00) 

Доброго времени суток, All!
Такая проблема. Есть таблица, где есть несколько поле с датами в виде целого числа наоборот, то есть:
20030630 - 30.06.2003 г.
20021228 - 28.12.2002 г.
Причем даты могут быть "пустыми" и "укороченными":
0 - ?
20020000 - 2002 г.
20020500 - 05.2002 г.
Раньше я конвертил это все в обработчике события OnCalcFields проги, база данных была на Paradox. Теперь все это дело потребовалось перенести на MS SQL 6.5 и старый способ жутко тормозит. Есть мысль перенести обработку этих полей и конвертацию из в строки на самом SQL серваке. Только вот как лучше: хранимую процедуру или что еще надо? Я к сожалению в SQL не очень силен.

С уважением Разживин Александр.


Котяра   (2003-07-02 15:34:00) [1]

> а вот продолжать использовать TTable на MS SQL - это тормоза

Это я уже давно понял :) Но даже с TQuery все одно работает медленнее. Дело в том, что кроме преобразования дат у меня там вычисляются значения еще нескольких полей. Вот и тормозит. Именно поэтому я и хочу перенести хотя бы часть обработки на сервер


ЮЮ   (2003-07-02 02:37:00) [2]

>Теперь все это дело потребовалось перенести на MS SQL 6.5 и старый способ жутко тормозит

Cкорость обработчика OnCalcFields никак не зависит от используемой БД, а вот продолжать использовать TTable на MS SQL - это тормоза


sniknik   (2003-07-01 19:38:00) [3]

> Даты типа 20030630 MSSQL воспринимает на ура.
если бы они строкой задавались а так как число..

> Используя встроенные и пользовательские ( если есть возможность) функции.

возможностей полно (3 варианта, наверняка можно еще придумать)


select Round(20030630/10000, 0, 1) AS Year,
Round((20030630 % 10000)/100, 0, 1) AS Month,
20030630 % 100 AS Day

SELECT DATEADD(Year, Round(20030630/10000, 0, 1)-1900,
DATEADD(Month, Round((20030630 % 10000)/100, 0, 1)-1,
DATEADD(Day, 20030630 % 100-1, 0))) AS Date

SELECT CAST(CAST(20030630 AS varchar(8)) AS DateTime) AS Date


Johnmen   (2003-07-01 17:56:00) [4]

>Котяра © (01.07.03 17:43)
>как лучше на серваке на лету выполнять любые преобразования
>данных для показа юзверю

Используя встроенные и пользовательские (если есть возможность) функции.


Котяра   (2003-07-01 17:43:00) [5]

Вообще-то я хотел узнать, как лучше на серваке на лету выполнять любые преобразования данных для показа юзверю


Котяра   (2003-07-01 17:40:00) [6]

> А вот этого следует избегать изначально. К чему создавать себе лишние проблемы?

Из-за этого и мучаюсь... а то бы проще CONVERTом - я уже смотрел :)


LordOfSilence   (2003-07-01 15:05:00) [7]

Что-то типа этого:
CAST(SUBSTRING(DATE_TIME_IDDOC, 1, 8) AS datetime)
А вот пустые и укороченные, согласен, это зря.
Приведи все свое хозяйство к общему знаменателю.


stone   (2003-07-01 14:43:00) [8]


> Есть таблица, где есть несколько поле с датами в виде целого
> числа наоборот, то есть:
> 20030630 - 30.06.2003 г.
> 20021228 - 28.12.2002


Даты типа 20030630 MSSQL воспринимает на ура.


> Причем даты могут быть "пустыми" и "укороченными"


А вот этого следует избегать изначально. К чему создавать себе лишние проблемы?


Семен Сорокин   (2003-07-01 14:10:00) [9]

посмотри справку по CONVERT


Наверх

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