2010-11-22 16 views
6

Mit SQL Server 2008 verfügt der Datentyp time über ein optionales Präzisionsargument (Standardwert ist 7). Damit können Sie steuern, wie viele Nachkommastellen gespeichert und angezeigt werden.Kann die Genauigkeit von SQL Server 2008 TIME auf nur Stunden und Minuten reduziert werden?

DECLARE @time time(3) 
SET @time = GETDATE() 
PRINT @time 

Die oben würde dies drucken,

10:47:25.347 

Die Dokumentation sagt der kleinste Präzision time(0) ist. Dies würde 10:47:25 speichern und drucken.

Ist es möglich, die Präzision noch mehr zu reduzieren, zu eliminieren/Null Sekunden: 10:47?

Ich weiß, dass dies manuell durch Hinzufügen einer Einschränkung (DATEPART(seconds, @time) = 0), Mathe auf Dateneingabe, um die Sekunden Null und manuell formatieren beim Drucken gemacht werden kann, aber ich bin auf der Suche nach einem einfacheren Weg, um nur ein Feld zu definieren eine Tabelle als "Stunden und Minuten", ähnlich wie der Typ date ermöglicht es Ihnen, ein Feld als "nur das Datum, keine Zeitkomponente" zu definieren.

Antwort

4

Nein, es ist nicht möglich, die Genauigkeit des time Datentyp weiter als time(0)

1
SET @time = convert(varchar(5),getdate(),8) 

Hier zu reduzieren Sie das Ergebnis GETDATE zu einem VARCHAR werfen und es Formatierung mit dem modifier 8, die Zeit bedeutet, Format.

EDIT: Dies gibt Ihnen eine Zeichenfolge, ist vielleicht nicht das Ergebnis, das Sie suchen.

Grüße.

1

Wenn das von Ihnen gewünschte Intervall eines der von SQL Server erkannten Intervalle (Minute, Stunde, Tag usw.) ist, dann können Sie Ihren eigenen Datentyp definieren (sagen Sie Stunden) und speichern es dann als eine ganze Zahl, die die SQL Server verwendet (Mitternacht 1. Januar 1900) nur eine absolute Stunden Zahl ausgehend von gewissen Basisreferenzzeit (oder verwenden die gleiche Basisreferenzzeit

Konvertieren aus dem gespeicherten Integer-Wert (@IntVal), zur tatsächlichen Stunde als Datetime, (@realDT) unter Verwendung des folgenden. (unter der Annahme, dass @baseDatetime als Basiszeit definiert ist

Declare @baseDatetime smalldatetime 
Set @baseDatetime = 0 -- for 1 Jan 1900, or 
Set @baseDatetime = 'd Month yyyy' for some other base 

@realDT->@IntVal: @IntVal = DateDiff(hour, @baseDatetime, @realDT) 
@IntVal->@realDT: @realDT = DateAdd(hour, @IntVal, @baseDatetime) 
2

Verwenden Sie smalldatetime und ignorieren Sie das Datumsbit (es wird 01 Jan 1900 sein). Es hat Minutengenauigkeit.

So nützlich wie die Zeit ist, so haben wir es in den alten Tagen gemacht (SQL Server 2005 und vorher :-)

Verwandte Themen