Je souhaite écrire une requête dans l'instruction SELECT au format 'JJ-MMM-AAAA' par exemple:
'1er janvier-2019' ou '23-mars-2018 '
4 Réponses :
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)
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.
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
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
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.
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.
Exemple: p >
select REPLACE(CONVERT(VARCHAR(20), GetDate(), 106), ' ', '-')
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 a >.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
datedans 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 ...