Comment puis-je convertir un Sql Server 2008 DateTimeOffset DateTime
Je suis l'espoir de convertir un tableau qui a une DATETIMEOFFSET
, jusqu'à un DATETIME
champ MAIS recalcule le temps en prenant l'avis de l'offset. Cela, en effet, convertit la valeur de UTC
.
par exemple.
CreatedOn: 2008-12-19 17:30:09.0000000 +11:00
qui seront converties à
CreatedOn: 2008-12-19 06:30:09.0000000
ou
CreatedOn: 2008-12-19 06:30:09.0000000 + 00:00 -- that's a `DATETIMEOFFSET`, but `UTC`.
Cheers 🙂
Vous devez vous connecter pour publier un commentaire.
De la conversion en utilisant presque n'importe quel style sera la cause de la valeur datetime2 être converti à l'UTC.
Aussi, la conversion de datetime2 à datetimeoffset simplement de définir le décalage à
+00:00
, par le dessous, il est un moyen rapide de convertir deDatetimeoffset(offset!=0)
àDatetimeoffset(+00:00)
convert()
fonction prend un 3ème paramètre qui spécifie le format de sortie. https://www.w3schools.com/sql/func_convert.asp. 1 = "dd/mm/yy" formatdatetimeoffset
àdatetime2
, cependant. C'est pourvarchar
conversions. docs.microsoft.com/en-us/sql/t-sql/functions/... (également W3Schools? ainsi de nombreuses options de meilleure qualité maintenant!)J'aimerais utiliser le construit en option SQL:
Je sais que c'est une vieille question, mais, si vous voulez convertir DateTimeOffset DateTime, je pense que vous devez prendre en compte le fuseau horaire du serveur de la conversion sur. Si vous venez de faire une conversion(datetime, @Madate, 1), vous perdez simplement le fuseau horaire, ce qui a probablement des résultats dans une conversion incorrecte.
Je pense que vous avez d'abord besoin de changer l'offset de la valeur DateTimeOffset, puis faire la conversion.
Le résultat de la conversion '2013-11-21 00:00:00.0000000 -00:00' DateTime sur un serveur qui est compensée à -7:00 2013-11-20 17:00:00.000. Avec la logique ci-dessus, il n'a pas de mater ce que le fuseau horaire du serveur ou de l'offset de la valeur de type DateTime, elle sera convertie en type DateTime dans les serveurs de fuseau horaire.
Je crois que vous avez besoin de le faire, car une valeur de type DateTime, on suppose que la valeur est dans le fuseau horaire du serveur.
Remarque: Les informations de fuseau horaire est jeté dans la conversion, si aucun style ("126" ici) est spécifié. Il pourrait également être jetés dans les autres styles, je ne sais pas -- en tout cas suivants ajuste correctement pour la TZ de l'information. Voir CAST et CONVERT.
Heureux SQL require.
Modifier
Ne sais pas si c'est important mais ...
datetime
ne Pouvez pas stocker ce niveau de précision et d'exactitude. Si ce qui précède est d'exécuter les fractions de secondes, il sera tronqué à 3 chiffres (et la précision est moins que ça). Le même-même avecdatetime2
(etdatetimeoffset(7)
) produit un non tronquée valeur:0
ou (équivalent) en omettant le code de style jeter les informations de fuseau horaire. L'un des autres codes figurant dans le document MSDN conserve.DATETIMEOFFSET
àDATETIME2
. Je n'ai pas trouvé d'autres que 0 et 1, qui sont acceptés (mais je n'ai pas tous les essayer). 126 est de style valide pour la conversion deDATETIMEOFFSET
àVARCHAR
.Afin de tenir compte de l'heure avancée, j'ai utilisé les éléments suivants:
Remarque:
time_stamp_end_of_interval
est un varchar