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

Откуда: Украина, г.Киев
Сообщений: 96
Всем привет! Есть один вопрос. Суть в следующем. В процедуре сравниваютс две даты date1 и date2, выбираемые из некой таблицы. Определяется их разность в секундах с помощью функции DATEDIFF(second, date1, date2). Так вот несмотря на то, что date2 > date1, для некоторых их значений получается разность отрицательной! Полагаю, что причина в том, что обе даты представлены по-умолчанию в американском формате PM/AM. Вопрос - как перевести их в обычный 24-часовый формат для решения этой проблемы? Буду благодарен коллегам за оперативный ответ ;)
4 июн 12, 22:51    [12664664]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
Glory
Member

Откуда:
Сообщений: 104751
Абросов Юрий
Определяется их разность в секундах с помощью функции DATEDIFF(second, date1, date2). Так вот несмотря на то, что date2 > date1, для некоторых их значений получается разность отрицательной! Полагаю, что причина в том, что обе даты представлены по-умолчанию в американском формате PM/AM.

У типа данных datetime один единственный формат
4 июн 12, 23:00    [12664714]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
Абросов Юрий
Member

Откуда: Украина, г.Киев
Сообщений: 96
А в чем же тогда причина моей проблемы, если не в формате, уважаемый Glory?
Мы с Вами давно общаемся на этом форуме, правда я в последнее время редко захожу сюда. Но всегда, когда захожу получаю ответ в первую очередь от Вас. И очень рад, что Вы первым откликнулись на мое сообщение. Был бы еще более рад, если бы получил от Вас более развернутый ответ, а не столь лаконичный ;)
Да, забыл сказать, что пользуюсь SQL2008 и, насколько знаю, там используется не только тип datetime. но и новые дополнительные типы даты/времени - если это имеет значение для сути моей проблемы.
4 июн 12, 23:55    [12664983]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
step_ks
Member

Откуда:
Сообщений: 936
а структура таблицы с полями date1 и date2 и сам запрос с datediff где?
5 июн 12, 06:34    [12665273]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
Glory
Member

Откуда:
Сообщений: 104751
Абросов Юрий
А в чем же тогда причина моей проблемы, если не в формате, уважаемый Glory?

"Проблема" со значениями, которые вы храните в таблице.

Абросов Юрий
Да, забыл сказать, что пользуюсь SQL2008 и, насколько знаю, там используется не только тип datetime. но и новые дополнительные типы даты/времени - если это имеет значение для сути моей проблемы.

Другие типы данных не имеют значение
5 июн 12, 08:44    [12665424]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
Абросов Юрий
Member

Откуда: Украина, г.Киев
Сообщений: 96
step_ks
а структура таблицы с полями date1 и date2 и сам запрос с datediff где?


Вот таблица:

CREATE TABLE [SURVEY].[Attempt](
[ID_Attempt] [int] IDENTITY(1,1) NOT NULL,
[Survey_ID] [int] NOT NULL,
[Person_ID] [int] NOT NULL,
[StartTime] [datetime] NOT NULL,
[EndTime] [datetime] NOT NULL,
[Hostname] [varchar](100) NOT NULL,
[Points] [int] NOT NULL,
[Maxpoints] [int] NOT NULL,
[Completed] [bit] NOT NULL,
CONSTRAINT [PK_Attempt] PRIMARY KEY CLUSTERED
(
[ID_Attempt] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

А вот запрос:

SELECT ASS.ID_Assignment AS Assignment_ID,
ATT.ID_Attempt AS Attempt_ID,
ASS.Person_ID AS Person_ID,
ATT.StartTime AS StartTime,
ATT.EndTime AS EndTime,
DATEDIFF(second, StartTime, EndTime) AS Duration,
ATT.Points AS Points,
ATT.Maxpoints AS MaxPoints,
ATT.Completed AS [Status]
FROM [SURVEY].[Assignment] AS ASS
left join SURVEY.Attempt AS ATT ON (ASS.Person_ID = ATT.Person_ID AND ASS.Survey_ID = ATT.Survey_ID)
5 июн 12, 13:43    [12667861]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
step_ks
Member

Откуда:
Сообщений: 936
и
select * from [SURVEY].[Attempt] where StartTime > EndTime
ничего не возвращает,
а
select * from [SURVEY].[Attempt] where DATEDIFF(second, StartTime, EndTime)<0
возвращает?
5 июн 12, 13:48    [12667921]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
Абросов Юрий
Member

Откуда: Украина, г.Киев
Сообщений: 96
step_ks
и
select * from [SURVEY].[Attempt] where StartTime > EndTime
ничего не возвращает,
а
select * from [SURVEY].[Attempt] where DATEDIFF(second, StartTime, EndTime)<0
возвращает?


Ни один, ни другой запрос ничего не возвращает!
5 июн 12, 14:02    [12668087]     Ответить | Цитировать Сообщить модератору
 Re: Проблемы с использованием функции DATEDIFF  [new]
iiyama
Member

Откуда:
Сообщений: 642
И как тогда понять Вашу фразу?
автор
Так вот несмотря на то, что date2 > date1, для некоторых их значений получается разность отрицательной
Если Вы пишите Ни один, ни другой запрос ничего не возвращает!
5 июн 12, 14:12    [12668202]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить