J'ai une colonne flottante avec des nombres de longueur différente et j'essaye de les convertir en varchar.
Certaines valeurs dépassent la taille maximale de bigint, donc je ne peux pas faire quelque chose comme ça
cast(cast(float_field as bigint) as varchar(100))
J'ai essayé d'utiliser la décimale, mais les nombres ne sont pas de la même taille, donc cela n'aide pas trop
CONVERT(varchar(100), Cast(float_field as decimal(38, 0)))
Toute aide est appréciée.
METTRE À JOUR:
La valeur de l'échantillon est 2,2000012095022E + 26 .
sql-server-2008
hgulyan
la source
la source
cast(float_field as varchar(max))
sinon je ne comprends pas la questionRéponses:
Essayez d'utiliser la
STR()
fonction.Fonction STR ()
Autre remarque: ce pad sur la gauche avec des espaces. Si c'est un problème, combinez avec
LTRIM
:la source
Select LTRIM(Str(float_field, 38, 0))
pour vos données?Str
fonction. Le nombre de chiffres après la virgule décimale. Avez-vous lu le lien que j'ai publié? Changez le zéro en 10.Select LTRIM(Str(float_field, 38, 10))
Le seul bit de requête que j'ai trouvé qui renvoie le même numéro d'origine EXACT est
Voir http://www.connectsql.com/2011/04/normal-0-microsoftinternetexplorer4.html
Les autres solutions ci-dessus arrondiront parfois ou ajouteront des chiffres à la fin
MISE À JOUR : selon les commentaires ci-dessous et ce que je peux voir dans https://msdn.microsoft.com/en-us/library/ms187928.aspx :
Doit être utilisé dans les nouvelles versions de SQL Server (Azure SQL Database et à partir de SQL Server 2016 RC3)
la source
0
valeur flottante convertie en0.0E0
. J'avais besoin de convertir le champ float envarchar
tant que je dois l'afficherNA
quandNULL
et0
tel quel. J'ai réalisé cela en ajoutant uneCASE
déclaration dans la requête comme ci-dessous;CASE WHEN float_field IS NULL THEN 'NA' WHEN float_field = 0 THEN '0' ELSE CONVERT(VARCHAR, float_field, 128) END AS float_As_VChar
c'est la solution que j'ai fini par utiliser dans sqlserver 2012 (puisque toutes les autres suggestions avaient l'inconvénient de tronquer une partie fractionnaire ou un autre inconvénient).
production:
cela a l'avantage supplémentaire (dans mon cas) de faciliter le séparateur de milliers et la localisation:
production:
la source
Sujet utile merci.
Si vous voulez comme moi supprimer les leadings zéro, vous pouvez l'utiliser:
la source
float n'a qu'un max. précision de 15 chiffres. Les chiffres après la 15e position sont donc aléatoires et la conversion en bigint (max. 19 chiffres) ou décimale ne vous aide pas.
la source
Cela peut aider sans arrondir
la source
Convertissez en un
integer
premier puis en unstring
:la source
Essayez celui-ci, devrait fonctionner:
la source
Si vous utilisez une fonction CLR, vous pouvez convertir le float en une chaîne qui ressemble exactement au float, sans tous les 0 supplémentaires à la fin.
Fonction CLR
.
Exemple
.
Production
.
Caveat
Toutes les chaînes converties sont tronquées à 18 décimales et il n'y a pas de zéros de fin. 18 chiffres de précision ne sont pas un problème pour nous. Et, 100% de nos nombres FP (près de 100 000 valeurs) semblent identiques en tant que valeurs de chaîne comme ils le font dans la base de données en tant que nombres FP.
la source
La réponse d'Axel modifiée un peu car elle produira dans certains cas des résultats indésirables.
la source
de la documentation de REPLACE () :
tests:
nul ==> [NULL]
1.11 ==> 1.11
1.10 ==> 1.1
1.00 ==> 1
0.00 ==> 0
-1.10 ==> -1.1
0.00001 ==> 1e-005
0.000011 ==> 1.1e- 005
la source
Sélectionnez
cast (replace (convert (decimal (15,2), acs_daily_debit), '.', ',') As varchar (20))
depuis acs_balance_details
la source
Basé sur la réponse moléculaire:
la source
Je viens de rencontrer une situation similaire et j'ai été surpris par les problèmes d'arrondi des `` très grands nombres '' présentés dans SSMS v17.9.1 / SQL 2017.
Je ne suggère pas d'avoir une solution, cependant j'ai observé que FORMAT présente un nombre qui semble correct. Je ne peux pas dire que cela réduit les problèmes d'arrondi ou est utile dans une fonction mathématique compliquée.
T Code SQL fourni qui devrait clairement démontrer mes observations tout en permettant aux autres de tester leur code et leurs idées en cas de besoin.
la source
est la meilleure façon de ne pas ajouter
.0000
de chiffre à la fin de la valeur.la source