Konvertieren .NET Ticks auf SQL Server-DateTime -
Ich bin sparen eine TimeSpan
(aus .Die NETTO -) Wert in meiner db als BIGINT
im SQL-Server (speichern der Ticks-Eigenschaft). Ich möchte wissen, wie zu konvertieren, das BIGINT
Wert auf eine DATETIME
Wert in SQL-Server (nicht im .NET). Irgendwelche Ideen?
Cheers
EDIT:
Bin ich mit NHibernate Karte ein TimeSpan
Eigenschaft, die ich habe, und es besteht die Ticks-Eigenschaft. Ich benutze es für relative Stunden (oder Minuten) die Kontrolle über einige date.
Intern in dem system alles in Ordnung ist, ist diese Umwandlung nicht erforderlich ist. Jedoch bei der Durchführung von zufälligen Abfragen in SQL Server, ist es schwer zu verstehen, die beibehaltene form einer TimeSpan
. Also, eine Funktion, wo ich den pass der Ticks
Wert und eine DateTime
zurückgegeben würde, geben Sie den Betrag in Stunden, Minuten und Sekunden, die TimeSpan
darstellt.
InformationsquelleAutor Pedro | 2010-02-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin mir nicht sicher, wie genau dies wird mit den Sekunden, aber Sie könnten versuchen, so etwas wie:
Eigentlich eine andere Möglichkeit, die funktionieren würde, in SQL 2005 ist zu beachten, dass die Anzahl der ticks von 0001-01-01 bis 1900-01-01 ist 599266080000000000. Mit, dass Sie das tun könnten:
Btw, es sollte auch angemerkt werden, dass die Zecken-Wert beginnt von '0001-01-01' nicht '1900-01-01'.
Der code ist toll, aber wenn die Zeitspanne repräsentiert Stunden und nicht nur ein Datum, das resultierende Datum ist zu gering, um dargestellt werden als datetime. Aber der code ist ein guter start, werde ich markieren Sie es als Antwort und damit arbeiten. Ich danke Ihnen sehr!
Dies funktionierte großartig für einen Blick in meine quartz.net Trigger: DATEADD(hour,@EST_offset_h,DATEADD(mi, (.START_TIME - 599266080000000000) * POWER(10.00000000000,-7) / 60, '1900-01-01')) ALS "StartDateTimeEST-4'
InformationsquelleAutor Thomas
Ich weiß wirklich nicht, SQL-Server, aber heute hat ein Kollege von mir hatte das gleiche problem und ich denke ich habe eine Lösung gefunden, wie dieser:
wo 599266080000000000 ist die Zecken-Wert für 01/01/1900 00:00:00.
InformationsquelleAutor fogbank
Können Sie mit dieser Funktion entnommen Pavel Gatilov s blog konvertieren Sie eine 64-bit-Ganzzahl in einen datetime-Wert mit Millisekunden-Präzision im server local time:
Alternative code-geeignet für die inline-Verwendung:
+1 für die brilliante UTC -> Lokale Konvertierung. Es gibt Artikel nach online Leuten zu erzählen, zu erstellen timezone offset-Tabellen und so, und dann gibt es diese, so einfach und begraben in ein scheinbar anderes Thema.
Die UTC -> lokale Konvertierung ist nur sinnvoll, wenn Sie das Datum vergleichen, ist neueren Datums. Wenn Sie mit einem Datum, das Sie sind nicht sicher, wenn es während der Sommerzeit (A. K. A. Sommer-Zeit), dann müssen Sie noch einige Vergleiche, um ordnungsgemäß konvertiert. Hier ist ein gutes Beispiel für den Einstieg
InformationsquelleAutor Pavel Chuchuva
Einen
TimeSpan
ist nicht ein Datum, und speichern es als solche kann Verwirrung in die Zukunft.Gibt es einen Grund, warum Sie kann nicht speichern Sie einfach die Zecken zu einem integer-Feld und ändern Sie nicht seine Bedeutung?
InformationsquelleAutor Oded
Den Wert des
TimeSpan.TicksPerSecond
.NET (einfach aufschreiben).Dann in Ihrer SQL, teilen Sie die Anzahl der Teilstriche Anzahl geben Sie die Anzahl der Sekunden.
Können Sie dann teilen Sie diese durch 60 zu bekommen, Minuten, etc.
InformationsquelleAutor BarrettJ
Sollten Sie in der Lage sein zu verwenden, die BESETZUNG eingebaute Funktion in SQL Server.
erhalten Sie 2010-02-02 00:00:00.000
InformationsquelleAutor Jeremy
Habe ich herausgefunden, dass es auf meiner eigenen:
288,000,000,000 Zecken für 8 Stunden, so dass die folgenden
SELECT
gibt einen dummy-Termin mit der Anzahl der Stunden angegeben ...Dank Allens Bemühungen.
InformationsquelleAutor Pedro