1
votes

Comment écrire une requête pour sélectionner des données avec un format de date 'JJ-MMM-AAAA'?

Je souhaite écrire une requête dans l'instruction SELECT au format 'JJ-MMM-AAAA' par exemple:

'1er janvier-2019' ou '23-mars-2018 '


6 commentaires

SELECT CONVERT (VARCHAR, GetDate (), 106) ?


L'amende le manuel a ce sujet couvert.


@Sami: si vous voulez VARCHAR (30) , écrivez-le. Sinon, mieux vaut être explicite .


Voulez-vous dire que le champ de données de la table est dans ce format ou que la date du paramètre d'entrée / de la clause de requête est dans ce format? (Je suppose que vous comparez un champ à une valeur, mais vous n'avez pas réellement dit ce que vous essayez de faire.)


Personnellement, je retournerais la date sous forme de date dans votre SQL et demanderais à votre couche de présentation de faire le formatage.


À partir de SQL-Server, il y a FORMAT () . Cette fonction n'est pas connue pour être rapide, mais elle est très flexible. En général, il est très dangereux de s'appuyer sur des formats dépendant du système et de la langue. Dans votre couche de données, cela devrait être une simple DATE , tandis que votre couche de présentation gère la sortie lisible par l'homme ...


4 Réponses :


4
votes

Simplement

23-Jan-2019

SELECT REPLACE(CONVERT(VARCHAR, GetDate(), 106), ' ', '-')

Voir CAST and CONVERT où le Styles de date et d'heure a >

Si vous voulez vraiment renvoyer le séparateur '-' , vous pouvez faire comme

23 Jan 2019

Retours:

SELECT CONVERT(VARCHAR, GetDate(), 106)


1 commentaires

Il convient de noter que les résultats dépendent du paramètre de langue. Cela renverra 23-janv-201 si la langue est le français.



2
votes

Vous pouvez utiliser T-SQL FORMAT () pour demander le format exact de la sortie et de la culture selon vos besoins:

SELECT FORMAT(GETDATE(), '%d-MMM-yyyy', 'en')

Il est disponible depuis SQL Server 2012

Cependant, il est préférable de contrôler le format au niveau de l'application


2 commentaires

le seul problème ici est que si le jour est compris entre 1 et 9, il y aura un zéro non significatif, donc pas exactement comme OP demandé


@PawelCzapski, merci, vous avez raison, l'instruction de format a été ajustée à% d, donc elle retournera jour sans zéro en tête



1
votes

Si vous supprimez les tirets, par exemple `` 1 janvier 2018 '' alors cela fonctionne hors de la boîte. C'est aussi un format vraiment astucieux qui fonctionne toujours si vous ne connaissez pas les paramètres de la base de données.

N'oubliez pas que les noms de mois sont abrégés différemment selon les langues.


0 commentaires

0
votes

Vous pouvez le faire assez facilement avec un appel Convert en SQL dans un format numéroté. Ce sera proche de ce que vous voulez, mais pour votre format exactement, vous devrez remplacer les espaces dans la chaîne par des tirets en utilisant un appel Replace sur le résultat de la conversion.

Référence: https: // docs .microsoft.com / fr-fr / sql / t-sql / functions / cast-and-convert-transact-sql? view = sql-server-2017

Exemple: p >

select REPLACE(CONVERT(VARCHAR(20), GetDate(), 106), ' ', '-')


0 commentaires