![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Конвертация даты в строку на 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