Supprimer les zéros à droite de décimales dans SQL Server
J'ai une colonne DECIMAL(9,6)
c'est à dire qu'il prend en charge les valeurs comme 999,123456.
Mais lorsque j'insère des données, comme la 123,4567 il devient 123,456700
Comment faire pour supprimer ces zéros?
- S'il vous plaît changer la bonne réponse à @Andomar réponse
- Je crois fermement que cela devrait être fait dans la couche de présentation, en effet. C'est pourquoi je n'ai jamais changé la accepté de répondre. Cependant, après d'autres considérations, je pense que je dois accepter ce que la communauté a clairement indiqué quelle réponse est la meilleure.
Vous devez vous connecter pour publier un commentaire.
Un
decimal(9,6)
magasins de 6 chiffres sur le côté droit de la virgule. Affichage des zéros à la fin ou pas, c'est une mise en forme de la décision, généralement mis en œuvre sur le côté client.Mais depuis SSMS formats
float
sans les zéros à droite, vous pouvez supprimer les zéros de fin par la coulée de ladecimal
à unfloat
:imprime:
(Mon séparateur décimal est une virgule, mais SSMS formats virgule par un point. Apparemment un problème connu.)
Vous pouvez utiliser le
FORMAT()
fonction (SqlAzure et Sql Server 2012+):Être prudent lors de l'utilisation avec FLOTTEUR (ou RÉEL): ne pas utiliser
g17
ou plus (oug8
ou plus avec le RÉEL), à cause de la précision limitée de la représentation de l'ordinateur provoque des effets indésirables:En outre, de souligner que, selon la la documentation:
Travaille dans SqlAzure, trop.
J'étais réticent à jeter à flotter en raison du potentiel pour plus de chiffres dans ma virgule qu'flotteur peut représenter
FORMAT
lorsqu'il est utilisé avec un standard .net format string " g8 " retourné la notation scientifique dans les cas de très petites décimales (par exemple 1e-08) qui a été tout aussi inadaptésÀ l'aide d'une chaîne de format personnalisée (https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings) m'a permis de réaliser ce que je voulais:
Si vous voulez que votre numéro de disposer d'au moins une fuite de zéro, de sorte 2.0 ne pas devenir 2, utilisez une chaîne de format comme
0.0#####
Le point décimal est localisée, de sorte que les cultures qui utilisent une virgule comme séparateur décimal à la rencontre d'une virgule de sortie où la . est
Bien sûr, c'est le discouragable pratique d'avoir de la couche de données à faire la mise en forme (mais dans mon cas, il n'y a pas d'autre couche; l'utilisateur est littéralement l'exécution d'une procédure stockée et mettre le résultat dans un e-mail :/)
imprime:
devrait le faire.
J'ai eu un problème similaire, mais a également été nécessaire pour enlever la virgule où aucune décimale était présent, c'était ma solution qui divise la virgule dans ses composants, et les bases du nombre de caractères, il faut partir du point décimal de chaîne à la longueur de la fraction de la composante (sans l'aide de CAS). Pour rendre les choses encore plus intéressantes, mon numéro a été stocké dans un flotteur sans ses décimales.
Le résultat est douloureux, je sais, mais j'y suis arrivé, avec beaucoup d'aide de la les réponses ci-dessus.
La meilleure façon n'est PAS la conversion de FLOAT ou de l'ARGENT avant de les convertir en raison de la possibilité de perte de précision. Donc les moyens sûrs peut être quelque chose comme ceci :
où @valeur peut être tout décimal(x,y)
sp_
pour une procédure stockée ,fn_
pour les fonctions ,tbl
pour les tables et ainsi de suite... ce n'est pas une obligation, mais c'est les meilleures pratiques pour organiser nos bases de données.J'ai eu un problème similaire, besoin de couper les zéros à droite du nombre, comme
xx0000,x00000,xxx000
J'ai utilisé:
Code est le nom du champ contenant le nombre à être supprimés. Espérons que cela aide quelqu'un d'autre.
Une autre option...
Je ne sais pas comment efficace c'est, mais il semble fonctionner et ne pas passer par l'intermédiaire d'float:
La ligne du milieu enlève les espaces à droite, les deux extérieurs supprimer le point si il n'existe pas de chiffres décimaux
J'avais besoin de supprimer les zéros à droite sur mon décimales, donc je peut en sortie d'une chaîne d'une certaine longueur, de pointe zéros
(par exemple, j'avais besoin de sortie 14 caractères de sorte que 142.023400 deviendrait 000000142.0234),
J'ai utilisé
parsename
,reverse
etcast
as int
pour supprimer les zéros de fin:(Pour ensuite obtenir mon zéros j'ai pu reproduire le bon nombre de zéros en fonction de la durée de la ci-dessus et de les enchaîner présent à l'avant de la ci-dessus)
J'espère que cela aide quelqu'un.
Comment à ce sujet? En supposant que les données qui arrivent dans votre fonction en tant que @thisData:
il est possible de supprimer et de les zéros à droite dans TSQL
De le convertir à l'aide de la chaîne STR TSQL fonction si pas de chaîne, Puis
Supprimer les deux principaux & les zéros à droite
Plus d'infos sur forum.
REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(X,'0',' ')),' ','0'),'.',' ')),' ','.')
Essayez ceci :
Donne 20.55
Je comprends que c'est un vieux post, mais souhaitez fournir SQL que je suis venu avec
de l'essayer.
Le plus simple est de convertir la valeur en tant que FLOAT, puis à un type de données string.
Essayez ceci:
Je sais que ce fil est très vieux, mais pour ceux qui ne sont pas à l'aide de SQL Server 2012 ou au-dessus ou ne peuvent pas utiliser la fonction FORMAT pour une raison quelconque, les ouvrages suivants.
Aussi, beaucoup de ces solutions ne fonctionne pas si le nombre était inférieur à 1 (par exemple, 0.01230000).
Veuillez noter que le code suivant ne fonctionne pas avec des nombres négatifs.
Retourne 10.012345 et 0.012345 respectivement.
Essayez ceci:
999999
, l'OP est demandant de supprimer les zéros de fin.Une VIRGULE(9,6) colonne convertir flotter sans perte de précision, de sorte CAST(... COMME float) fera l'affaire.
@HLGEM: en disant que le flotteur est un mauvais choix pour le stockage de nombres et de "ne Jamais utiliser float" n'est pas correct, vous devez simplement connaître vos chiffres, par exemple les mesures de température irait bien comme flotteurs.
@abatishchev et @japongskie: les préfixes devant SQL stockées les procs et les fonctions sont toujours une bonne idée, si ce n'est requis; les liens que vous avez mentionnés seul instruit ne pas utiliser le "sp_" préfixe pour les procédures stockées qui vous ne devriez pas les utiliser, d'autres préfixes sont très bien par exemple "usp_" ou "spBob_"
De référence:
"Tous les entiers avec 6 ou moins importante chiffres après la virgule peuvent être convertis IEEE 754 valeur à virgule flottante sans perte de précision": https://en.wikipedia.org/wiki/Single-precision_floating-point_format