Existe-t-il un moyen d'get des dates avec des formats personnalisés dans SQL Server?

Dans Oracle, vous pouvez utiliser:

SELECT to_char(sysdate, 'yyyy-mm') FROM dual; 

pour montrer seulement la partie année et mois d'une date. En outre, vous pouvez définir NLS_DATE_FORMAT pour modifier la manière dont les dates sont renvoyées par défaut.

Je sais que dans SQL Server, vous disposez d'un set d'options prédéfinies que vous pouvez utiliser:

 SELECT convert(varchar, getdate(), 110) –- mm-dd-yyyy SELECT convert(varchar, getdate(), 111) –- yyyy/mm/dd 

Mais existe-t-il une option qui me donne la même liberté que to_char d'Oracle? De preference celui qui ne nécessite pas de créer une fonction personnalisée.

Actuellement, la meilleure option est d'avoir une fonction CLR qui est un wrapper pour DateTime.ToSsortingng(ssortingng format) .NET.

Si vous ne voulez pas de fonction séparée, vous pouvez créer la string requirejse à partir de morceaux:

 YEAR(@d) + '-' + MONTH(@d) + '-' + DAY(@d) 

En ce qui concerne la solution définie, il y aura une fonction de mise en forme dans la prochaine version de SQL Server.

Cela dépend de la version de SQL Server que vous utilisez.

SQL Server 2005, 2008 et 2008 R2

Pour ces versions, vous devrez utiliser SQLCLR pour exposer cette fonctionnalité à partir de .NET. Vous pouvez écrire votre propre fonction SQLCLR en utilisant la class DateTime (comme indiqué dans la réponse @ GSerg), ou vous pouvez simplement download et installer la version gratuite de SQL # (dont je suis l'auteur, mais la fonction Date_Format est gratuite).

Exemple:

 SELECT SQL#.Date_Format(GETDATE(), 'dddd in MMMM', '') AS [Default_language], SQL#.Date_Format(GETDATE(), 'dddd in MMMM', 'he') AS [Hebrew], SQL#.Date_Format(GETDATE(), 'dddd in MMMM', 'de') AS [German]; 

Résultats:

 Default_language Hebrew German Monday in January יום שני in ינואר Montag in Januar 

SQL Server 2012 et plus récent

Utilisez la fonction FORMAT embeddede.

Exemple:

 SELECT FORMAT(GETDATE(), 'dddd in MMMM') AS [Default_language], FORMAT(GETDATE(), 'dddd in MMMM', 'he') AS [Hebrew], FORMAT(GETDATE(), 'dddd in MMMM', 'de') AS [German]; 

Résultats:

 Default_language Hebrew German Monday in January יום שני in ינואר Montag in Januar 

Pour les options SQLCLR et FORMAT embeddedes

Les deux pages MSDN suivantes détaillent les options de mise en forme disponibles:

  • Chaînes de format de date et d'heure personnalisées
  • Chaînes de format de date et d'heure standard