J'exécute des requêtes administratives et compile les résultats à partir sp_spaceused
de SQL Server 2008 pour examiner les ratios d'espace données / index de certaines tables de ma base de données. Bien sûr, j'obtiens toutes sortes de chiffres dans les résultats et mes yeux commencent à passer sous silence. Ce serait vraiment pratique si je pouvais formater tous ces nombres avec des virgules (987654321 devient 987,654,321). C'est drôle que depuis de nombreuses années que j'utilise SQL Server, ce problème ne se soit jamais posé depuis la plupart du temps, je ferais du formatage au niveau de la couche de présentation, mais dans ce cas, le résultat T-SQL dans SSMS est la présentation.
J'ai envisagé de simplement créer un UDF CLR simple pour résoudre ce problème, mais il semble que cela devrait être faisable dans le vieux T-SQL. Donc, je vais poser la question ici - comment faites-vous le formatage numérique dans vanilla T-SQL?
la source
Réponses:
Dans SQL Server 2012 et versions ultérieures, cela formatera un nombre avec des virgules:
Vous pouvez également modifier
0
le nombre de décimales souhaité.la source
format
fonction.culture
.Bien que je sois d'accord avec tout le monde, y compris l'OP, qui dit que la mise en forme doit être effectuée dans la couche de présentation, cette mise en forme peut être effectuée dans T-SQL en
money
convertissant en puis en convertissant envarchar
. Cela inclut les décimales de fin, cependant, qui pourraient être boucléesSUBSTRING
.la source
Je recommande de remplacer au lieu de sous-chaîne pour éviter les problèmes de longueur de chaîne:
la source
Pour les implémentations SQL Server 2012+, vous aurez la possibilité d'utiliser le FORMAT pour appliquer le formatage de chaîne aux types de données non-chaîne.
Dans la question d'origine, l'utilisateur avait demandé la possibilité d'utiliser des virgules comme séparateurs de milliers. Dans une question fermée en double , l'utilisateur avait demandé comment appliquer le formatage des devises. La requête suivante montre comment effectuer les deux tâches. Il démontre également l'application de la culture pour en faire une solution plus générique (abordant la fonction de Tsiridis Dimitris pour appliquer un formatage grec spécial)
SQLFiddle pour ce qui précède
la source
String index out of range: 33
Démo 1
Démontre l'ajout de virgules:
Démo 2
Montre les virgules et les décimales. Observez qu'il arrondit le dernier chiffre si nécessaire.
Compatibilité
SQL Server 2012+
.la source
Veuillez essayer avec la requête ci-dessous:
Format avec virgule décimale droite:
la source
FORMAT
fonction estSELECT format(123456789987654321,'###,##0')
, ou plus simplement,select format(123456789987654321, 'N0')
comme @ThomasMueller a répondu.sortie = 9,876,543
et vous pouvez remplacer 9876543 par le nom de votre colonne.
la source
J'ai essayé l'astuce de l'argent ci-dessus, et cela fonctionne très bien pour les valeurs numériques avec deux chiffres ou moins significatifs. J'ai créé ma propre fonction pour formater les nombres avec des décimales:
la source
Cela appartient dans un commentaire à la réponse de Phil Hunt mais hélas je n'ai pas le représentant.
Pour retirer le ".00" de la fin de votre chaîne numérique, le parsename est très pratique. Il tokenise les chaînes délimitées par des points et renvoie l'élément spécifié, en commençant par le token le plus à droite comme élément 1.
Donne "987 654 321"
la source
voici un autre UDF t-sql
la source
la source
Voici une fonction scalaire que j'utilise qui corrige certains bugs dans un exemple précédent (ci-dessus) et gère également les valeurs décimales (au nombre de chiffres spécifié) (EDITED pour fonctionner également avec 0 et des nombres négatifs). Autre remarque, la méthode de conversion en argent ci-dessus est limitée à la taille du type de données MONEY et ne fonctionne pas avec des décimales à 4 chiffres (ou plus). Cette méthode est certainement plus simple mais moins flexible.
la source
Un autre UDF qui, espérons-le, est assez générique et ne fait pas d'hypothèses quant à savoir si vous voulez arrondir à un nombre spécifique de décimales:
la source
- ================================================= =================== -
/ * Cette fonction a besoin de 3 arguments: le premier argument est le @Numero_str dont le nombre comme entrée de données, et les 2 autres arguments spécifient comment les informations seront formatées pour la sortie, ces arguments sont @Pos_Enteros et @Pos_Decimales qui spécifient combien Entiers et décimales que vous souhaitez afficher pour le nombre que vous passez comme argument d'entrée. * /
la source
Pour SQL Server avant 2012 qui n'inclut pas la fonction FORMAT, créez cette fonction:
sélectionnez dbo.FormatCurrency (12345678) renvoie 12 345 678,00 $
Déposez le $ si vous voulez juste des virgules.
la source