Convertir les ticks .NET en SQL Server DateTime
Je suis de l'enregistrement d'un TimeSpan
(à partir de .NET) de la valeur dans ma db comme BIGINT
dans SQL Server (enregistrement de la propriété Ticks). Je veux savoir comment faire pour convertir cette BIGINT
de la valeur à un DATETIME
valeur dans SQL Server (pas dans .NET). Des idées?
Acclamations
EDIT:
Je suis à l'aide de NHibernate pour mapper un TimeSpan
bien j'ai, et il persiste Tiques de la propriété. Je l'utilise pour relative heures (ou minutes) le contrôle sur une date.
Internes dans le système, tout est parfait, cette conversion n'est pas nécessaire. Cependant, lors de l'exécution aléatoire des requêtes dans SQL Server, il est difficile de comprendre la persisté forme d'un TimeSpan
. Donc, une fonction où je passe la Ticks
valeur et un DateTime
est renvoyé serait donner le montant en heures, minutes et secondes que TimeSpan
représente.
source d'informationauteur Pedro
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas sûr de la façon précise, ce sera avec les secondes, mais vous pouvez essayer quelque chose comme:
En fait une autre manière qui serait à l'œuvre dans SQL 2005 est à noter que le nombre de tiques de 0001-01-01 à 1900-01-01 est 599266080000000000. Avec que vous pourriez faire:
Je ne sais pas vraiment SQL Server, mais aujourd'hui, un de mes collègues a eu le même problème et je pense j'ai trouvé une solution à ceci:
où 599266080000000000 est la tiques de la valeur pour 01/01/1900 00:00:00.
Vous pouvez utiliser cette fonction de prise de Pavel Gatilov blog pour convertir un entier de 64 bits pour une valeur datetime avec précision à la milliseconde en heure locale du serveur:
Code alternatif adapté pour inline utilisation:
Un
TimeSpan
n'est pas une date, et de l'enregistrer en tant que telle peut causer de la confusion dans l'avenir.Est-il une raison pour laquelle vous ne pouvez pas simplement enregistrer les tiques à un champ de type entier et de ne pas changer le sens?
Obtenir la valeur de
TimeSpan.TicksPerSecond
.NET (juste de l'écrire).Puis, dans votre SQL, vous pouvez diviser le nombre de cycles par le nombre, donner le nombre de secondes.
Vous pouvez divisez-la par 60 pour obtenir des minutes, etc.
Vous devriez être en mesure d'utiliser le MOULÉ intégré dans SQL Server.
vous obtenez 2010-02-02 00:00:00.000
J'ai pensé à elle sur mon propre:
288,000,000,000 tiques représente 8 heures, donc la suite
SELECT
renvoie à un mannequin de la date avec la quantité d'heures spécifié ...Grâce aux efforts de tout le monde.