Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Дата в программе бухучета Галактика  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
В Галактике дата представлена такими числами - 128909829 или 130157332 и т.д.

Как конвертировать их в что-то типа ГГГГММДД
12 мар 12, 13:21    [12231053]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
iljy
Member

Откуда:
Сообщений: 8711
vma_mnt,

и что сие число означает?
12 мар 12, 13:26    [12231095]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Если UNIX-дата, то
SELECT DATEADD(SECOND,128909829,'1970');
Но как-то маловато секунд
12 мар 12, 13:28    [12231127]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
в полях, в которых хранятся даты, например, дата рождения таблицы persons записаны вот эти числа. Очевидно, что это дата. Вопрос - как ее сконвертировать в что-то понятное.
12 мар 12, 13:29    [12231139]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
Glory
Member

Откуда:
Сообщений: 104751
vma_mnt
в полях, в которых хранятся даты, например, дата рождения таблицы persons записаны вот эти числа. Очевидно, что это дата.

И какой же дате соответствует число 128909829 вы уже выясниили ?
12 мар 12, 13:35    [12231195]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
vma_mnt
в полях, в которых хранятся даты, например, дата рождения таблицы persons записаны вот эти числа. Очевидно, что это дата. Вопрос - как ее сконвертировать в что-то понятное.
Тогда 128909829 -> '19740201 00:17:09.000'
Дата рождения вполне может быть такой, как мне кажется.
12 мар 12, 13:43    [12231300]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Вот только для людей, родившихся до 1 января 1970 года, будет отрицательное целое.
Это нормально?
12 мар 12, 13:45    [12231311]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
Не выяснил, пытаюсь разобраться по этой ссылке https://www.sql.ru/forum/actualthread.aspx?tid=242681
12 мар 12, 13:46    [12231322]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
iap
vma_mnt
в полях, в которых хранятся даты, например, дата рождения таблицы persons записаны вот эти числа. Очевидно, что это дата. Вопрос - как ее сконвертировать в что-то понятное.
Тогда 128909829 -> '19740201 00:17:09.000'
Дата рождения вполне может быть такой, как мне кажется.

а как здесь объяснить ненулевое время? вряд ли клиентское приложение поддерживает возможность помимо даты рождения указывать ещё и время рождения.
12 мар 12, 13:50    [12231368]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Shakill
iap
пропущено...
Тогда 128909829 -> '19740201 00:17:09.000'
Дата рождения вполне может быть такой, как мне кажется.

а как здесь объяснить ненулевое время? вряд ли клиентское приложение поддерживает возможность помимо даты рождения указывать ещё и время рождения.
По ссылке ТС всё разжёвано: 2156845
12 мар 12, 13:58    [12231432]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
vma_mnt
Member

Откуда: Новокузнецк
Сообщений: 602
Вот простенькая функция

create function ФнДатаИзГалактики (@Знач int)
returns date

as

begin

if isnull(@Знач, 0) = 0 return null

declare @Y int, @M int, @D int, @Date date

set @Y = round(@Знач/65536, 0)

set @Знач = @Знач - @Y * 65536

set @M = round(@Знач/256, 0)

set @D = @Знач - @M * 256

RETURN cast(@Y as varchar(4))
+ case when @M < 10 then '0' + cast(@M as varchar(1)) else cast(@M as varchar(2)) end
+ case when @D < 10 then '0' + cast(@D as varchar(1)) else cast(@D as varchar(2)) end

end
12 мар 12, 14:12    [12231563]     Ответить | Цитировать Сообщить модератору
 Re: Дата в программе бухучета Галактика  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
vma_mnt
Вот простенькая функция

create function ФнДатаИзГалактики (@Знач int)
returns date
<...>


плохая функция. всё проще

DECLARE @a int = 128909829;

SELECT CAST(
		DATEADD(dd, @a % 256,
		DATEADD(mm, @a % 65536 / 256,
		DATEADD(yy, @a / 65536, CAST('00010101' AS date)))) 
		AS date)
12 мар 12, 14:50    [12231989]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить