Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.24;
Скачать: CL | DM;

Вниз

Конвертация даты в строку на SQL сервере   Найти похожие ветки 

 
Котяра ©   (2003-07-01 14:01) [0]

Доброго времени суток, 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-01 14:10) [1]

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


 
stone ©   (2003-07-01 14:43) [2]


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


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


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


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


 
LordOfSilence ©   (2003-07-01 15:05) [3]

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


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

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

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


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

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


 
Johnmen ©   (2003-07-01 17:56) [6]

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

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


 
sniknik ©   (2003-07-01 19:38) [7]

> Даты типа 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


 
ЮЮ ©   (2003-07-02 02:37) [8]

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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.07.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
1-77854
Номолос
2003-07-13 08:07
2003.07.24
? про меню


14-78040
Hooch
2003-07-07 14:38
2003.07.24
хелп в формате .chm


3-77797
Sliften
2003-06-29 20:38
2003.07.24
Как програмно добавить поле


1-77975
Гость
2003-07-11 11:28
2003.07.24
Русское название каталога в TOpenDialog.InitialDir


1-77980
Виталик
2003-07-10 20:26
2003.07.24
Перемещение формы с BorderStyle=bsNone