Форум: "Базы";
Текущий архив: 2003.07.24;
Скачать: [xml.tar.bz2];
ВнизКонвертация даты в строку на 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c