11
votes

Dans SQL Server, comment convertir une date à une chaîne de format M / D / AAAA? (Pas de zéros de premier plan, pas mm / dd / aaaa)

En ce moment, mon code a la conversion suivante pour un champ de date: xxx

Cependant, qui renvoie les dates de 03/01/2010. La demande était d'afficher les dates d'affichage 3/1/2010 (sans les principaux zéros, mais avec une année à 4 chiffres). J'ai regardé http://msdn.microsoft.com/en-us/ Bibliothèque / MS187928.aspx et je ne vois rien qui exclut explicitement les zéros de premier plan.

Comment formater la date pour exclure les zéros de premier plan?


0 commentaires

4 Réponses :


16
votes

Voici comment je le ferais:

SELECT LTRIM(STR(MONTH(Citation.PublishedOn)))+'/'+LTRIM(STR(DAY(Citation.PublishedOn)))+'/'+STR(YEAR(Citation.PublishedOn),4)


5 commentaires

Bingo! Cependant, après la conversion à M / D / AAAAYY, le problème est que l'ordre par la requête de la date donne résultat du 4/1/2014, 4/10/2014, 4/7/2014 quand il est censé être le 4/1/2014, 4/7/2014, 4/10/2014. Y a-t-il un moyen d'atteindre ce format M / D / AAAA AAAA? Veuillez suggérer. Merci!


@Niladrisarkar, je pense que vous devrez commander par une colonne différente


De même, sélectionnez Cast (mois (@DT) comme varchar) + '/' + Cast (jour (@DT) comme varchar) + '/' + CAST (année (@DT) comme varchar)


@Subratasarkar Je tirerais le champ de date réel dans un champ séparate (ex _date_sort) à votre vue, masquez-le de l'utilisateur dans n'importe quel affichage et triez-la ou triez à la colonne Date de votre vue. À l'heure actuelle, le tri est le tri basé sur des règles de tri de chaîne, il s'agit donc de comparer chaque caractère plutôt que de la valeur entière car elle est maintenant un type de chaîne.


Meilleure solution pour faire signe ensemble une chaîne de date que j'ai trouvée jusqu'à présent en termes de maintenabilité, de flexibilité et d'interprétabilité pour les futurs devs (car dans mon expérience, si vous êtes sur 2008, vous serez probablement là pendant un moment, semble que des magasins de M $ prennent la plus longue pour améliorer les choses)



3
votes

vous pouvez faire:

trucs (remplacer ('/' + convert (char (10), citation.publiedon, 101), '/ 0', '/'), 1,1, '')

(basé sur http://www.sqlservercl.com/forums/topic1241877 -1292-1.aspx .)


0 commentaires

2
votes

J'ai adopté une approche différente, qui est plus d'une astuce:

REPLACE(REPLACE('a'+ @table.date ),'a0',''),'a','')


2 commentaires

En tant que note latérale-- Depuis la plupart des gens qui veulent voir des dates de mois singuliers, veulent les voir à la tête du champ de la date entière, je supposais que vous avez déjà votre date au format 101. IE: 08/01/12


N'oubliez pas non plus que vous êtes à l'esprit de la représentation de la date plus grande, avec un style «Char (10)», vous devrez remplacer les occurrences de 'A0' et 'A' avec des espaces vides ALA: ->, ' A0 ',' ') et ne pas supprime ALA: ->,' A0 ',' ')



7
votes

Vous pouvez utiliser la fonction de format, qui est construite pour simplement ce genre de chose, même si je suis d'accord que si vous pouvez attendre pour le formater sur le côté client, vous pouvez être meilleur au fur et à mesure que vous vous donnez la flexibilité pour utiliser ces données. comme une date à tout moment le long de la ligne (YMMV - juste plus une meilleure pratique).

Exemple: xxx

voir http://msdn.microsoft.com/en-us/library/hh213505.aspx < p> peut ne pas être disponible dans les anciennes versions de SQL Server


5 commentaires

Était-ce disponible dans SQL Server 2008 aussi? Si oui, gentil - j'aimerais avoir trouvé cela. Sinon, alors il n'a pas répondu à la question comme demandé, mais peut toujours être utile pour d'autres personnes qui ont SQL Server 2012.


Non ça ne le fait pas. Il donnera un message d'erreur 'Format' n'est pas un nom de fonction intégré reconnu.


Est-ce la méthode préférée SQL 2012?


@ Heckflosse_230 Il évite certainement d'astuces astucieuses qui sont plus difficiles à lire / à maintenir / à déboguer, et à une manière intégrée et concise de la manipuler


Malheureusement, il a fallu environ 23 ans de M $ pour déterminer que certains cas d'utilisation nécessitent la possibilité de formater () les chaînes de date, puis de la mettre en œuvre. Donc, si vous êtes bloqué sur quoi que ce soit avant SQL Server 2012, vous êtes laissé à vos propres périphériques pour paginer une chaîne de date formatée.