J'ai décidé que j'utiliserais 8601 datetimes pour toutes les dates que je reviens de mon application. Soudain, dans un proc particulier, getdate() ne retourne pas un datetime avec un T au milieu. Je devrais aussi mentionner que je convertis l'ensemble contenant un datetime au format XML en utilisant FOR XML PATH. Généralement, lorsque je convertis une table contenant datetime en XML, je reçois 8601 dates formatées. Mais dans un cas, je ne le suis pas.pourquoi mon 126 datetime ne revient pas avec un T au milieu?
select (cast(getdate() as datetime)) -- returns 2010-01-25 10:13:46.033
donc je convertis directement comme ceci:
select convert(datetime, getdate(), 126) -- returns 2010-01-25 10:14:35.923
Mais si je l'ai jeté à un nvarchar je reçois le T !!
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126) -- returns 2010-01-25T10:15:29.633
Ce qui est encore inconnu pour moi est que si je sélectionne plusieurs versions de cela avec une union, la version T disparaît. Mais en sélectionnant sans union, la version T (la dernière) reste.
-- returns 4 rows of 2010-01-25 10:15:57.333
select getdate() union all
select (cast(getdate() as datetime)) union all
select convert(datetime, getdate(), 126) union all
SELECT CONVERT(NVARCHAR(30), GETDATE(), 126)
Je n'ai aucune idée de ce qui pourrait se produire. Je pensais que 8601 dates étaient indépendantes des paramètres régionaux, donc je ne pense pas que ce soit quelque chose comme ça.
Référence ("aaaa-mm-jjThh: mi: SS.mmm" pour 126): http://msdn.microsoft.com/en-us/library/ms187928.aspx
Bien que (dans l'exemple d'union) si vous mettez la requête nvarchar en premier, il convertira tout en datetime .. bizarre .. (SQL Server 2005) –
Je pense que vous avez raison, mon installation de test n'est pas bonne. Pourtant, je voyais l'étrangeté de mes résultats (pour le vrai proc). Le problème était dans le XML: si vous faites FOR XML PATH le convertisseur met en 8601 dates. J'ai édité la question pour inclure ceci. Dans mon cas, le problème était qu'il y avait un datalayer qui convertissait les datetimes différemment de SQL (parfois). – jcollum
@Gaby: C'est correct. Ce n'est pas le premier résultat qui détermine le type de données, ce sont les règles de priorité de type. J'ai changé cela dans la réponse. – Guffa