Вычитание даты и времени T-SQL - PullRequest
0 голосов
/ 06 августа 2009

У меня есть столбец Начало и конец столбца. Я хочу получить количество часов и минут между ними. Выбор приведения (End - Start as varchar) дает странные результаты, например, 2009-07-24 06:16 - 2009-07-24 06:30 дает результат 0:14 AM ... Важно привести его к varchar, потому что позже Я буду вырезать подстроки из этой строки с помощью right () и left (). Как я могу получить правильный результат?

Ответы [ 7 ]

5 голосов
/ 06 августа 2009

Вы можете использовать функцию DATEDIFF

SELECT DATEDIFF(mi, Start, End)

Это даст вам количество минут между началом и концом, затем вы можете преобразовать это в часы и минуты.

0 голосов
/ 06 августа 2009

для часов и минут относительно друг друга: Использование:

DECLARE @StartDate  datetime
DECLARE @EndDate    datetime

set @StartDate ='2009-07-24 06:16'
SET @EndDate   ='2009-07-24 07:30 '
 SELECT DATEDIFF(HH,@StartDate,@EndDate) AS Hours,
        DATEDIFF(mi,@StartDate,@EndDate)-DATEDIFF(HH,@StartDate,@EndDate)*60 AS Minutes

возвращается:

Hours       Minutes
----------- -----------
1           14

(1 row(s) affected)
0 голосов
/ 06 августа 2009

varchars никогда не должны использоваться для манипулирования датами. используйте datediff вот так:

declare @date1 datetime, @date2 datetime
select @date1 = getdate(), @date2 = DATEADD(n, 145, @date1)
SELECT @date1, @date2

select  DATEDIFF(n, @date1, @date2) as DiffMinutes,
    DATEDIFF(n, @date1, @date2)/60 as DiffHours, 
    DATEDIFF(n, @date1, @date2)%60 as DiffMinutesOfTheHour
0 голосов
/ 06 августа 2009

Причиной проблемы, с которой вы сталкиваетесь, является то, как SQL обрабатывает две части способа сохранения даты.

Дата хранится в виде двух частей внутри числового значения. Первая часть, целочисленная часть хранит день, а вторая часть, десятичная часть хранит время.

Если ваши две даты были эквивалентны 1,50 и 1,25, то 1,25 - 1,50 = -0,25 - это затем делится на две части: -0 дней и 0,25 времени. 0,25 дня будет переводиться в 6 часов, поэтому будет время 6:00 утра.

Чтобы правильно манипулировать датами, всегда используйте DATEDIFF и DATEPART.

0 голосов
/ 06 августа 2009

Вы, вероятно, должны сделать дату

0 голосов
/ 06 августа 2009

используйте DATEDIFF , чтобы вычислить разницу между двумя датами в необходимых единицах. Затем конвертируйте результат в varchar.

0 голосов
/ 06 августа 2009

Приведите его к числовому значению, в противном случае он попытается привести его к дате.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...