​"/> ​">

Maison  >  Article  >  développement back-end  >  Partager des exemples de formatage de nombres dans SQL

Partager des exemples de formatage de nombres dans SQL

零下一度
零下一度original
2017-06-28 15:41:392159parcourir

Utilisez des instructions SQL pour formater des données doubles, par exemple, supprimez uniquement les deux chiffres après la virgule décimale
Un. Méthode principale

--prendre le nombre avant la décimale, sans tenir compte de l'arrondi
select left('30000.72234', charindex('.', '30000.72234')-1)
où : charindex (' .', '30000.72234') pour obtenir la position du point décimal ; -1 signifie tout avant le point décimal. Si vous voulez obtenir n après le point décimal, écrivez simplement +n. C'est bien utile.

--séparez tous les trois chiffres par des virgules, laissez 2 décimales et ne considérez pas l'arrondi
select convert(varchar, cast(round(30000.72234,0) as money), 1)

--Séparez tous les trois chiffres par des virgules, sans laisser de décimales, pensez à arrondir
select left(convert(varchar, cast(round(30000.72234,0) as money), 1) , charindex('.', convert( varchar, cast(round(30000.72234,0) as money), 1))-1)


deux. Comparaison de CAST et ROUND
1.
SELECT CAST('123.456' en décimal) obtiendra 123 (le point décimal sera omis).
Si vous souhaitez obtenir deux chiffres après la virgule.
Vous devez modifier ce qui précède en
SELECT CAST('123.456' as decimal(38, 2))

===>123.46
Il sera automatiquement arrondi !

2.
SELECT ROUND(123.75633, 2, 1),
ROUND(123.75633, 2)
Les deux valeurs obtenues par le SQL ci-dessus sont différentes. : 123.75000, ce dernier est : 123.76000.
Parce que le premier a été tronqué avant l'arrondi, laissant 2 chiffres après la virgule.
Ce dernier n'est pas intercepté. Une fois arrondi, il obtiendra naturellement 123,76000


Problème : Il faut calculer le ratio de la valeur interrogée dans la base de données Oracle. SQL similaire à ce qui suit :
Sélectionnez Round((remise/Montant),2) parmi dual ;

Les nombres calculés de cette manière peuvent répondre à la plupart des besoins. Mais pour les nombres inférieurs à 1, un problème surgit... des données similaires à 0,45 sont affichées. Le 0 devant 0,45 a disparu.

Ce qui suit résume deux méthodes pour résoudre le problème des 0 manquants.

La première solution :
SELECT DECODE (TRUNC (1/100),0, REPLACE (1/100, '.', '0.'),TO_CHAR (1/100))
FROM DUAL ;

Il vous suffit de remplacer 1/100 par le pourcentage dont vous avez besoin.

La deuxième solution :
SELECT RTrim(To_Char(1/100,'FM99999999990.9999'),'.') FROM dual;

La méthode de remplacement est la même que ci-dessus .

Comparaison détaillée des deux méthodes :

La première formule est plus complexe, mais elle peut gérer des valeurs numériques générales.

La seconde semble simple, mais le nombre de chiffres dans la valeur formatée doit être supérieur au nombre de chiffres dans le calcul. Par exemple, SELECT RTrim(To_Char(200,'FM90.9999'),'.') FROM dual; La valeur affichée est ########, car elle a dépassé la plage de formatage.

--------------------

J'ai trouvé que la valeur du champ a dans la table tb était de 0,4286. ? Il peut être converti en un pourcentage de 42,9% (garder une décimale après la virgule)
Par exemple,
sélectionnez a dans tb
0,4286
Le résultat que je veux obtenir est
42,9%

Code SQL

select cast(cast(a*100 as decimal(18,1)) as varchar) + '%' from tb


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn