Как сравнить две даты, чтобы найти разницу во времени в SQL Server 2005, манипуляции с датами
У меня есть два столбца:
job_start job_end
2011-11-02 12:20:37.247 2011-11-02 13:35:14.613
Как можно было бы использовать T-SQL для поиска необработанного количества времени, которое прошло между началом работы и завершением задания?
Я пробовал это:
select (job_end - job_start) from tableA
но в итоге:
1900-01-01 01:14:37.367
Ответы
Ответ 1
Посмотрите на функцию DateDiff()
.
-- Syntax
-- DATEDIFF ( datepart , startdate , enddate )
-- Example usage
SELECT DATEDIFF(DAY, GETDATE(), GETDATE() + 1) AS DayDiff
SELECT DATEDIFF(MINUTE, GETDATE(), GETDATE() + 1) AS MinuteDiff
SELECT DATEDIFF(SECOND, GETDATE(), GETDATE() + 1) AS SecondDiff
SELECT DATEDIFF(WEEK, GETDATE(), GETDATE() + 1) AS WeekDiff
SELECT DATEDIFF(HOUR, GETDATE(), GETDATE() + 1) AS HourDiff
...
Вы можете увидеть его в действии /играть с ним здесь
Ответ 2
Вы можете использовать функцию DATEDIFF, чтобы получить разницу в минутах, секундах, днях и т.д.
SELECT DATEDIFF(MINUTE,job_start,job_end)
MINUTE, очевидно, возвращает разницу в минутах, вы также можете использовать DAY, HOUR, SECOND, YEAR (см. онлайн-ссылку книг для полного списка).
Если вы хотите получить фантазию, вы можете показать это по-другому, например, 75 минут могут отображаться следующим образом: 01:15: 00: 0
Вот код, который нужно сделать для SQL Server 2005 и 2008
-- SQL Server 2005
SELECT CONVERT(VARCHAR(10),DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000'),114)
-- SQL Server 2008
SELECT CAST(DATEADD(MINUTE,DATEDIFF(MINUTE,job_start,job_end),'2011-01-01 00:00:00.000') AS TIME)
Ответ 3
Передайте результат как TIME
, и результат будет во временном формате для продолжительности интервала.
select CAST(job_end - job_start) AS TIME(0)) from tableA
Ответ 4
Я думаю, вам нужен промежуток времени между job_start и job_end.
Попробуйте это...
select SUBSTRING(CONVERT(VARCHAR(20),(job_end - job_start),120),12,8) from tableA
Я закончил с этим.
01:14:37
Ответ 5
Если ваша база данных StartTime = 07:00:00
и endtime = 14:00:00
, и оба являются типами времени. Ваш запрос, чтобы получить разницу во времени, будет следующим:
SELECT TIMEDIFF(Time(endtime ), Time(StartTime )) from tbl_name
Если ваша база данных startDate = 2014-07-20 07:00:00
и endtime = 2014-07-20 23:00:00
, вы также можете использовать этот запрос.
Ответ 6
Объявить дату начала и окончания
DECLARE @SDATE AS DATETIME
TART_DATE AS DATETIME
DECLARE @END_-- Set Start and End date
SET @START_DATE = GETDATE()
SET @END_DATE = DATEADD(SECOND, 3910, GETDATE())
- Получить результат в формате HH: MI: SS: MMM (24H)
SELECT CONVERT(VARCHAR(12), DATEADD(MS, DATEDIFF(MS, @START_DATE, @END_DATE), 0), 114) AS TimeDiff
Ответ 7
Попробуйте это на сервере Sql
SELECT
start_date as firstdate,end_date as seconddate
,cast(datediff(MI,start_date,end_date)as decimal(10,3)) as minutediff
,cast(cast(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) as int ) as varchar(10)) + ' ' + 'Days' + ' '
+ cast(cast((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60) -
floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)) ) * 24 as int) as varchar(10)) + ':'
+ cast( cast(((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)
- floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24
-
cast(floor((cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)
- floor(cast(datediff(MI,start_date,end_date)as decimal(10,3)) / (24*60)))*24) as decimal)) * 60 as int) as varchar(10))
FROM [AdventureWorks2012].dbo.learndate
Ответ 8
Посмотрите DATEDIFF, это должно быть то, что вы ищете. Это займет две даты, которые вы сравниваете, и блок даты, в котором вы хотите разницу (дни, месяцы, секунды...)
Ответ 9
Ниже приведен код в формате hh: mm.
выберите ПРАВО (LEFT (job_end- job_start, 17), 5)