2011-07-27 6 views
1

J'ai la requête suivante:chaîne SQL Server à la conversion de la date

SELECT o.OrderNumber, 
    cast(o.DateOrdered as datetime), 
    cast(oi.Category as varchar(max)) 

FROM Orders o 
    LEFT OUTER JOIN OrderItems oi ON oi.OrderID = o.uid 
    LEFT OUTER JOIN OrderAddresses oa ON oa.OrderID = o.uid 

WHERE O.DateOrdered LIKE '6%2011%' AND (oa.Type = '4') AND (oa.Country = 'US') 

GROUP BY cast(oi.Category as varchar(max)), cast(o.DateOrdered as datetime), o.OrderNumber 

Je ne parviens pas à formater la datetime comme mm/dd/yyyy. Peu importe ce que j'ai essayé je continue à obtenir comme YYYY-MM-DD 00:00:00:000. Je dois oublier quelque chose de simple dans la syntaxe et j'espérais que quelqu'un pourrait me diriger dans la bonne direction? (SQL Server 2005)

Merci!

Répondre

0

Il ressemble à DateOrdered est VARCHAR

S'il vous plaît essayer

SELECT o.OrderNumber, 
    CONVERT(VARCHAR(25),cast(o.DateOrdered as datetime), 101), 
    cast(oi.Category as varchar(max)) 

FROM Orders o 
    LEFT OUTER JOIN OrderItems oi ON oi.OrderID = o.uid 
    LEFT OUTER JOIN OrderAddresses oa ON oa.OrderID = o.uid 

WHERE O.DateOrdered LIKE '6%2011%' AND (oa.Type = '4') AND (oa.Country = 'US') 

GROUP BY cast(oi.Category as varchar(max)), CONVERT(VARCHAR(25),cast(o.DateOrdered as datetime), 101), o.OrderNumber 
+0

Merci EricZ! Je ne travaille pas beaucoup en SQL et je savais que je négligeais complètement quelque chose comme ça. une fois que j'ai enveloppé la fonte dans la conversion par votre exemple, il a résolu le problème. – Scott

1

Essayez CONVERT au lieu de CAST:

CONVERT(VARCHAR(10), o.DateOrdered , 101) 

Ainsi, le GROUP BY ressemblerait à ceci:

GROUP BY CAST(oi.Category as varchar(MAX)), CONVERT(VARCHAR(10), o.DateOrdered , 101), o.OrderNumber 
+0

Quand j'ai essayé plus tôt (et encore ici juste pour être sûr) je finis par obtenir mon format de date sans zéros dans la journée. Par exemple, je reçois 6/1/2011 au lieu du 6/01/2011 donc la commande est désactivée. Essayé d'ajuster à travers les diverses spécifications de format (101, 102, etc ...) et la requête a retourné les mêmes résultats. Des idées? Le champ de chaîne que je reçois la date de notre est un nvarchar (50) si cela pouvait avoir quelque chose à voir avec ça? – Scott

+0

@Scott: Je vois 0 dans les champs mois et date ne suis pas sûr de ce qui pourrait être le problème .. Essayez ceci à la place: 'CONVERT (VARCHAR (10), o.DateOrdered, 112)' – Chandu

+0

Ce changement n'affecte pas le jeu de résultats, toujours obtenir des dates sans zéros de tête. J'ai testé GETDATE(), dans le même format juste pour être sûr qu'il n'était pas lié au serveur SQL. D'autres pensées? – Scott

1

CAST ne fera que convertir les types de données - mais il ne vous donne pas la possibilité de choisissez n'importe quel formatage.

Pour la mise en forme, vous devrez utiliser à la place CONVERT (voir MSDN Books Online pour plus de détails):

Essayez

SELECT CONVERT(VARCHAR(25), GETDATE(), 101) 

qui devrait rendre la date actuelle dans le format que vous recherchez.

Questions connexes