2015-01-09 14 views
5

Ich versuche, das Datum, Uhrzeit und Zeitzone einer Sitzung zu speichern, die innerhalb eines Werkzeugs eingerichtet ist. Ich erlaube dem Benutzer, Datum und Uhrzeit anzugeben sowie aus einer Zeitzonenliste auszuwählen.Verwenden von SQL Server Datetime

Mein Problem versucht, herauszufinden, wie man alle drei Teile nehmen und es in eine korrekte datetimeoffset zu speichern formatiert werden.

Ich glaube, das ist das Format, das SQL Server für datetimeoffset benötigt:

YYYY-MM-DD hh:mm:ss[.nnnnnnn] [{+|-}hh:mm] 

Meine erste Frage dabei ist, was die Werte meiner Zeitzone im Dropdown sollte?

Zweitens gibt es in Art und Weise in SQL Server eine integrierte diese Zeichenfolge von Daten zu übergeben und in die für datetimeoffset benötigt Format zu konvertieren?

+5

Daten haben ** nein ** Format. Sie sind binäre Werte. Formate gelten nur beim Konvertieren/Parsen von Strings. Verwenden Sie parametrisierte Abfragen und Datetime typisierte Parameter und Sie werden nicht bei allen –

+1

http://sqlfiddle.com/#!3/2a110d/2 – chridam

+0

Ehrfürchtig mit Parsing zu tun haben, so jetzt muss ich nur noch herausfinden, wie zu generieren eine Liste von Zeitzonen mit ihrem Offset-Wert; Vielen Dank! – SBB

Antwort

4

Wenn Ihr Werkzeug von Zeit zu String umwandeln kann, wandelt es in das Format, das Sie enthielten. Der Teil ist für Nanosekunden. Ich habe keine Anwendung gesehen, die diese Genauigkeit erfordert. Wenn Sie mit der Genauigkeit der zweiten Ebene OK sind, reicht datetimeoffset(0).

Beispiel:

DECLARE @time_str varchar(30) = '2015-01-19 7:20:00 -08:00' 
DECLARE @time datetimeoffset(0) = CONVERT(datetimeoffset, @time_str) 

SELECT DATEPART(YEAR, @time), 
     DATEPART(MONTH, @time), 
     DATEPART(DAY, @time), 
     DATEPART(HOUR, @time), 
     DATEPART(MINUTE, @time), 
     DATEPART(SECOND, @time), 
     DATEPART(TZOFFSET, @time) 
1

Ja, Datetime ist genau das, was Sie wollen.

Zweitens Ihre Auswahlliste verfügbare Offsets kommen sollte aus der ISO-Liste (http://en.wikipedia.org/wiki/List_of_tz_database_time_zones)

SQL Server kümmert sich nicht darum, ob die Zeitzone in der realen Welt versetzt existiert oder nicht, es muss nur gültig sein. Hier sind ein paar Beispiele:

CREATE TABLE #tmp1 (dto DATETIMEOFFSET); 

INSERT INTO #tmp1 (dto) VALUES (SYSDATETIMEOFFSET()) --system timestamp 
INSERT INTO #tmp1 (dto) VALUES ('2015-01-19 7:20:00 -08:00') --valid date, time, and offset 
INSERT INTO #tmp1 (dto) VALUES ('2015-01-19 7:20:00 -08:16') --vaid date, valid time, made up offset that doesn't exist in the real world. 

SELECT * 
FROM #tmp1 
Verwandte Themen