2017-01-05 11 views
0

Ich habe eine Tabelle mit einem Datetime-Feld namens [avg Zeit zu antworten]. Bei bestimmten Datensätzen wird die Uhrzeit falsch angezeigt, wie unten gezeigt:Korrigieren von Zeiten

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

Die hier angegebenen Zeiten sind falsch. Die oben gezeigten Zeiten sind als kleines Beispiel, aber sie müssen in Minuten Sekunden statt Stunden und Minuten formatiert werden.

Gibt es eine Möglichkeit, dies mit einem SQL-Skript zu korrigieren, da die Alternative beinhaltet, die Daten wieder zu extrahieren und das wird sein extrem schwierig und zeitaufwendig zu tun.

+1

Es ist, aber wie werden Sie diese * * bestimmte Datensätze identifizieren? – GurV

+0

Sie möchten die Werte von Minuten in Sekunden und Stunde in Minuten verschieben? –

+0

Korrigieren Ich möchte die Uhrzeit als 00:01:30 anzeigen, die momentan als 01:30:00 angezeigt wird, und die Minuten als Sekunden anzeigen. Ich bin mir nicht sicher, wie man bestimmte Datensätze identifiziert, aber das ist etwas, das herausgefunden werden kann. – Tom

Antwort

1

können Sie DATEPART verwenden:

Gibt eine Ganzzahl, die den angegebenen Datumsteil des angegebenen Datums darstellt.

Kombination mit DATEADD:

Gibt ein angegebenes Datum mit der angegebenen Nummer Intervall (Ganzzahl mit Vorzeichen) zu einem festgelegten Datumsteil von diesem Datum.

Beispiel:

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 

dies der Wert an einen date wirft, den Zeitabschnitt abzustreifen und zurück zu einem datetime die Zeit zu 00:00:00 einzustellen. Fügt dann Minuten basierend auf dem Stundenwert und Sekunden basierend auf dem Minutenwert hinzu.

Sie können dies mit einer UPDATE Anweisung verwenden, aber stellen Sie sicher, dass Sie eine WHERE Klausel verwenden, um zu vermeiden, alles zu aktualisieren, es sei denn, das ist, was Sie beabsichtigen. Aktualisierungsabfrage

Beispiel:

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;