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

Откуда:
Сообщений: 25
При сложении

convert(datetime,'20030101')+Round((left(convert(nchar, Date_On),11)-12685849200)/3600/24,0)

появляется такое сообщение

Arithmetic overflow error converting expression to data type datetime.

Как прибавить какое-либо количество дней к дате?
11 сен 08, 12:47    [6173114]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
DATEADD
11 сен 08, 12:50    [6173144]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
SELECT GETDATE() + 1 AS Tomorrow
11 сен 08, 12:52    [6173158]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Mariy@
Member

Откуда:
Сообщений: 25
Knyazev Alexey
 DATEADD


При использовании
dateadd(d,Round((left(convert(nchar, LastLogOn),11)-12685849200)/3600/24,0),convert(datetime,'20030101'))
появляется сообщение Adding a value to a 'datetime' column caused overflow...


Мне нужно именно к этой дате '20030101' прибавить количество дней которое возвращает Date_On (количество разное)
11 сен 08, 13:39    [6173488]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Mariy@
Knyazev Alexey
 DATEADD


При использовании
dateadd(d,Round((left(convert(nchar, LastLogOn),11)-12685849200)/3600/24,0),convert(datetime,'20030101'))
появляется сообщение Adding a value to a 'datetime' column caused overflow...


Мне нужно именно к этой дате '20030101' прибавить количество дней которое возвращает Date_On (количество разное)
DATEADD(DAY, Date_On, '2003')
?
Date_On - это, вообще-то, что такое? И какого типа?
11 сен 08, 13:47    [6173542]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Mariy@
Member

Откуда:
Сообщений: 25
Вобще в этом поле дата вот в таком виде 09/11/2008 09:00:44 я ее беру из др. системы (AD), а мне она в QA отображается как количество секунд (128655999718906250) прошедших с 01.01.1970 до 09/11/2008.
11 сен 08, 14:00    [6173662]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Mariy@
отображается как количество секунд (128655999718906250) прошедших с 01.01.1970 до 09/11/2008.


только должна быть разница в секунда 1226188800, но не как уж то, что у вас написано
select datediff(s, '19700101', '20081109')
11 сен 08, 14:03    [6173685]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
Mariy@
как количество секунд (128655999718906250) прошедших с 01.01.1970 до 09/11/2008.


продолжаю тему:
в сутках 86400 секунд (24*60*60),
тогда ваши секунды превращаются в ~4079654988 лет
11 сен 08, 14:07    [6173716]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Mariy@
как количество секунд (128655999718906250) прошедших с 01.01.1970 до 09/11/2008.



Нанотехнологии?!
11 сен 08, 14:12    [6173753]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
Имитация Большого взрыва в адронном коллайдере
11 сен 08, 14:17    [6173792]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Mariy@
Member

Откуда:
Сообщений: 25
Смейтесь, смейтесь вот, это написано в док-ии к AD

такие параметры, как lastLogon, pwdLastSet, accountExpires, представляют информацию о дате и времени в 32-битном UNIX-формате и содержат значения секунд, прошедших начиная с 1 января 1970 г., GMT. Для наглядности приведем некоторые значения, которые могут содержаться в файле выгруженных значений для параметров даты и времени в Unix-формате:
126858492000000000 — соответствует 1.01.2003 00:00
12 сен 08, 07:06    [6176703]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Алексей2003
Member

Откуда: Москва
Сообщений: 5645
2Mariy@
может вы более подробно изучите формат данных в ВАШЕЙ системе? а уже потом будете задавать вопросы, если они конечно еще будут.

для спящего время бодрствования равносильно сну
12 сен 08, 09:49    [6176998]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Mariy@
Смейтесь, смейтесь вот, это написано в док-ии к AD

такие параметры, как lastLogon, pwdLastSet, accountExpires, представляют информацию о дате и времени в 32-битном UNIX-формате и содержат значения секунд, прошедших начиная с 1 января 1970 г., GMT. Для наглядности приведем некоторые значения, которые могут содержаться в файле выгруженных значений для параметров даты и времени в Unix-формате:
126858492000000000 — соответствует 1.01.2003 00:00


Да???

SELECT DATEDIFF(ss, '19700101', '20030101')

----------- 
1041379200


SELECT DATEADD(ss, 1041379200, '19700101')

------------------------------------------------------ 
2003-01-01 00:00:00.000
12 сен 08, 10:06    [6177069]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
Mariy@
Member

Откуда:
Сообщений: 25
Спасибо, всем за участие, проблема решена, и она вовсе не была связана со знанием или не знанием формата данных в МОЕЙ системе.

[quot Алексей2003]@
может вы более подробно изучите формат данных в ВАШЕЙ системе? а уже потом будете задавать вопросы, если они конечно еще будут.

А вам Алексей2003, так ради спортивного интереса, и для подкрепления вашего комментария, предлагаю, если у вас есть возможность, выгрузить данные из Active Directory (LastLogOn), изучить формат данных, преобразовать к дате. Я буду очень вам признательна, если потом напишете здесь свой ответ. Спасибо.
12 сен 08, 11:59    [6177906]     Ответить | Цитировать Сообщить модератору
 Re: К дате прибавить дни  [new]
guest12345623456
Guest
from RBarryYoung

SELECT
DATEADD(minute,(convert(bigint,lastlogon)*100.0/POWER(10, 9) - (CONVERT(bigint, DATEDIFF(minute, '1/1/1801', '1/1/1953')) * 60))/60, '1/1/1753') AS date

или скорректировано

SELECT case when lastLogon = cast(0 as bigint) then null else DATEADD(minute,(convert(bigint,lastLogon)*100.0/POWER(10, 9) - (CONVERT(bigint, DATEDIFF(minute, '1801-01-01', '1953-01-01')) * 60))/60, '1753-01-01') end AS date
31 июл 09, 18:42    [7486355]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить