2017-01-05 3 views
0

У меня есть таблица, в которой есть поле datetime, называемое [avg time to answer]. Для некоторых записей время отображается неправильно, как показано ниже:Время исправления

1899-12-30 01:04:00.000 
1899-12-30 01:05:00.000 
1899-12-30 01:30:00.000 

Показанное здесь время неверно. Времена, показанные выше, являются небольшим образцом, но их необходимо отформатировать в минутах секунд, а не в часах и минутах.

Есть ли способ исправить это с помощью SQL-скрипта, поскольку альтернатива включает в себя извлечение данных еще раз, и это будет чрезвычайно трудным и трудоемким.

+1

Там есть, но как будет идентифицировать эти * некоторые * записи? – GurV

+0

Вы хотите переместить значения минут на секунды и час в минуты? –

+0

Правильно Я хочу показать время как 00:01:30, где в настоящее время отображается как 01:30:00 и показывает минуты как секунды. Я не уверен, как определить конкретные записи, но это некоторые из них, которые можно понять. – Tom

ответ

1

Вы можете использовать DATEPART:

Возвращает целое число, представляющее указанную DATEPART указанной даты.

В сочетании с DATEADD:

Возвращает указанную дату с заданным интервалом числа (целое число со знаком) добавляют к указанному DATEPART этой даты.

Пример:

DECLARE @val AS DATETIME = '1899-12-30 01:30:00.000'; 

SELECT @val; -- 1899-12-30 01:30:00.000 

SET @val = DATEADD(SECOND, DATEPART(MINUTE, @val), 
        DATEADD(MINUTE, (DATEPART(HOUR, @val)), 
          CAST(CAST(@val AS DATE) AS DATETIME))); 

SELECT @val; -- 1899-12-30 00:01:30.000 

Это ставит значение к date, сдирать часть времени и обратно к datetime, чтобы установить время 00:00:00. Затем добавляются минуты, основанные на значении часа и секундах на основе минутного значения.

Вы можете использовать это с оператором UPDATE, но убедитесь, что вы используете предложение WHERE, чтобы избежать обновления всего, если это не то, что вы намереваетесь.

Пример запроса Update:

CREATE TABLE #temp 
    (
     AvgTimeToAnswer DATETIME 
    ); 

INSERT INTO #temp 
     (AvgTimeToAnswer) 
VALUES ('1899-12-30 01:30:00.000'); 

SELECT * 
FROM #temp; -- 1899-12-30 01:30:00.000 

UPDATE #temp 
SET  AvgTimeToAnswer = DATEADD(SECOND, DATEPART(MINUTE, AvgTimeToAnswer), 
           DATEADD(MINUTE, 
             (DATEPART(HOUR, AvgTimeToAnswer)), 
             CAST(CAST(AvgTimeToAnswer AS DATE) AS DATETIME))); 
-- WHERE some condition 

SELECT * 
FROM #temp; -- 1899-12-30 00:01:30.000 

DROP TABLE #temp; 
Смежные вопросы