Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Честр Member Откуда: Сообщений: 14 |
Имеется дата указанная в виде 6-значного числа (типа 733345), измеряемая в днях от 01.01.0001. (с учетом високосных годов) Подскажите как можно перевести в нормальный вид (типа 30.10.2008)? |
30 окт 08, 16:06 [6377306] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
А сервер не 2008-й? |
30 окт 08, 16:13 [6377349] Ответить | Цитировать Сообщить модератору |
Vel Member Откуда: То там, то сям. Сообщений: 420 |
Честр,dateadd(day,@DaysCount,'1/1/1900') |
30 окт 08, 16:13 [6377355] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
DECLARE @V INT; SET @V=733345; SELECT DATEADD(DAY,@V%146097,CAST(@V/146097*400+1 AS CHAR(4))); |
30 окт 08, 16:21 [6377406] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
DECLARE @V INT; SET @V=733345; SELECT DATEADD(DAY,@V%146097, STR(@V/146097*400+1)); |
||
30 окт 08, 16:32 [6377506] Ответить | Цитировать Сообщить модератору |
Честр Member Откуда: Сообщений: 14 |
iap, спасибо огромное, работает! а что за магическое число 146097? |
30 окт 08, 16:42 [6377603] Ответить | Цитировать Сообщить модератору |
Anddros Member Откуда: Сообщений: 1077 |
declare @v int set @v=733345 select dateadd(dd,@v-693596,'19000101') |
30 окт 08, 16:44 [6377621] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
SELECT DATEDIFF(DAY,'2000','2400'); |
||
30 окт 08, 16:45 [6377626] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
![]() |
||
30 окт 08, 16:51 [6377673] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
А 0001-й год - это не то же самое, что 1901-й. Тут напрашивается 2000-й вместо 1900-го. |
||||
30 окт 08, 16:55 [6377702] Ответить | Цитировать Сообщить модератору |
Честр Member Откуда: Сообщений: 14 |
да, ребята, спасибо вам за помощь!!! |
30 окт 08, 16:56 [6377704] Ответить | Цитировать Сообщить модератору |
Anddros Member Откуда: Сообщений: 1077 |
Кстати, еще проще было бы не вычислять 'магическое число' 693596, а просто воспользоваться наводкой автора:select dateadd(dd,@v-733345,'20081030')Но хорошая мысля приходит опосля... ![]() |
30 окт 08, 16:57 [6377711] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
declare @v int set @v=733345 select dateadd(d,@v-730120,'2000') |
||||||
30 окт 08, 17:01 [6377732] Ответить | Цитировать Сообщить модератору |
Anddros Member Откуда: Сообщений: 1077 |
Не, не будет. Это чистая разница в днях меж '00010101' и '19000101', вычисленная при помощи 733345 и 30.10.2008. Только вот непонятно теперь, зачем? :) |
||
30 окт 08, 17:03 [6377742] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
Получается, что после 01.03.2300 Ваша формула уже не будет правильной. Так уж устроен Григорианский календарь! ![]() |
||||
30 окт 08, 17:12 [6377811] Ответить | Цитировать Сообщить модератору |
Anddros Member Откуда: Сообщений: 1077 |
Дык что с того??? В MS об этом судя по всему отлично знают. :) И функции dateadd, datediff нормально с этим работают. |
||
30 окт 08, 17:41 [6377994] Ответить | Цитировать Сообщить модератору |
Между сообщениями интервал более 1 года. |
некропостер
Guest |
Есть казначейская программа сэд (была, теперь у них суфд) там тоже для хранения даты используется такое число. Но также, в виде числа хранится время. Как ЕГО перевести в datetime с помощью SQL ? Например, 426025437 это 11:50:02 627884353 это 17:26:28 В Delphi я конвертировал это число в TDateTime так: TDateTime = число / 864000000 Миллисекунды мне не нужны. Использую MS SQL Server 2000 |
10 окт 12, 20:10 [13298696] Ответить | Цитировать Сообщить модератору |
некропостер
Guest |
подниму тему вверх. может кто подскажет |
11 окт 12, 00:20 [13299723] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
select cast(426025437 / 864000000. as datetime) |
11 окт 12, 00:32 [13299768] Ответить | Цитировать Сообщить модератору |
некропостер
Guest |
хехе, а ведь я почти так пробовал, но без точки после 864000000 и получил 00:00:00) спасибо! |
11 окт 12, 08:42 [13300239] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |