2017-02-04 4 views
0

Ich habe eine TIME-Tabelle erstellt. Diese Tabelle hat zwei Spalten: eine für Minuten und eine weitere für Sekunden. Ich habe ihren Datentyp als Dezimalzahl gemacht.TIme - SQL (Minuten und Sekunden)

Gibt es eine Möglichkeit, eine Ableitung Spalte zu erstellen, in der Minuten und Sekunden in diesem Format mm: ss von meinen zwei Spalten sind?

WENN NICHT, wie füge ich Daten in meine Minute Spalte ein, wenn es nicht ein DECIMAL Typ ist? Welcher Typ sollte es sein?

Vielen Dank!

Hinweis Ich bin mit SQL Server

+3

Warum die in 'Time' Spaltentyp nicht verwenden gebaut? – mclaassen

Antwort

1

Ihre Kommentare klingen so, als würden Sie versuchen, die Intervalle (oder die Dauer) arithmetisch zu berechnen.

SQL Server time Datentyp "Definiert eine Zeit von einem Tag. Die Zeit ist ohne Zeitzonenbewusstsein und basiert auf einer 24-Stunden-Uhr." Sie können keine zwei time Werte hinzufügen; 2 Uhr + 3 Uhr ist buchstäblich Unsinn. In SQL Server 2012. . .

select cast('2:00' as time) + cast('3:00' as time) 
Operand data type time is invalid for add operator. 

Andere dbms können eine unsinnige Zahl zurückgeben.

Standard-SQL enthält einen Datentyp interval, der die erwartete Arithmetik und Formatierung unterstützt. So 2 Uhr + 3 Stunden würde 5:00:00 (5 Uhr) zurückkehren. Wenn der Datentyp interval nicht unterstützt wird, speichern Sie die granularste Einheit (Sekunden für Sie) als Ganzzahl und formatieren Sie sie zur Anzeige. Ich könnte eine Sichtweise verwenden, ich selbst.

declare @val as integer; 
-- 10:01:12, 10 hours, 1 minute, 12 seconds, in seconds. 
set @val = (10 * 60 * 60) + (1 * 60) + 12; 

-- Leading zeroes for minutes and seconds. 
select @val as total_sec, 
     concat(@val/(60 * 60), ':', format((@val/60) % 60, 'D2'), ':', format(@val % 60, 'D2')) as total_time 
 
total_sec total_time 
-- 
36072  10:01:12 
0

Wie @mclaassen darauf hingewiesen, würde ich neugierig, warum Sie nicht verwenden, die in time Datentyp gebaut.

Das heißt, wenn Sie wirklich einen Zeitplan von Hand erstellen möchten, können Sie eine berechnete Spalte haben. Nennen wir es timeString.

alter table [time] 
    add timeString as (left('0' + cast([minutes] as varchar(10)), 2) + ':' + left('0' + cast([seconds] as varchar(10)), 2)) 

Siehe https://msdn.microsoft.com/en-us/library/ms188300.aspx für die Dokumentation auf berechnete Spalten in SQL Server.

Verwandte Themen