Ich habe eine Float-Spalte mit Nummern unterschiedlicher Länge und versuche, sie in Varchar umzuwandeln.
Einige Werte überschreiten die maximale Größe von bigint, daher kann ich so etwas nicht tun
cast(cast(float_field as bigint) as varchar(100))
Ich habe versucht, Dezimalzahlen zu verwenden, aber Zahlen sind nicht gleich groß, daher hilft dies auch nicht
CONVERT(varchar(100), Cast(float_field as decimal(38, 0)))
Jede Hilfe wird geschätzt.
AKTUALISIEREN:
Der Beispielwert ist 2.2000012095022E + 26 .
sql-server-2008
hgulyan
quelle
quelle
cast(float_field as varchar(max))
sonst bekomme ich die Frage nichtAntworten:
Versuchen Sie es mit der
STR()
Funktion.STR () Funktion
Noch ein Hinweis: Dieses Feld ist links mit Leerzeichen versehen. Wenn dies ein Problem ist, kombinieren Sie mit
LTRIM
:quelle
Select LTRIM(Str(float_field, 38, 0))
für Ihre Daten?Str
Funktion ist. Die Anzahl der Stellen nach dem Dezimalpunkt. Hast du den Link gelesen, den ich gepostet habe? Ändern Sie die Null auf 10.Select LTRIM(Str(float_field, 38, 10))
Das einzige Abfragebit, das ich gefunden habe und das genau dieselbe ursprüngliche Nummer zurückgibt, ist
Siehe http://www.connectsql.com/2011/04/normal-0-microsoftinternetexplorer4.html
Die anderen oben genannten Lösungen runden manchmal ab oder fügen am Ende Ziffern hinzu
UPDATE : Gemäß den Kommentaren unten und dem, was ich unter https://msdn.microsoft.com/en-us/library/ms187928.aspx sehen kann :
Sollte in neuen SQL Server-Versionen verwendet werden (Azure SQL-Datenbank und ab SQL Server 2016 RC3)
quelle
0
Float-Werts, der als konvertiert wird0.0E0
. Ich musste das Float-Feldvarchar
so konvertieren, dass es angezeigt wird,NA
wannNULL
und0
wie es ist. Ich habe dies erreicht, indem ichCASE
der folgenden Abfrage eine Anweisung hinzugefügt habe .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
Dies ist die Lösung, die ich in sqlserver 2012 verwendet habe (da alle anderen Vorschläge den Nachteil hatten, einen Bruchteil oder einen anderen Nachteil abzuschneiden).
Ausgabe:
Dies hat (in meinem Fall) den weiteren Vorteil, dass Tausende Trennzeichen und Lokalisierung einfach sind:
Ausgabe:
quelle
Nützliches Thema danke.
Wenn du wie ich die Nullen entfernen willst, kannst du das verwenden:
quelle
float hat nur eine max. Genauigkeit von 15 Stellen. Ziffern nach der 15. Position sind daher zufällig, und die Konvertierung in Bigint (max. 19 Ziffern) oder Dezimalzahlen hilft Ihnen nicht weiter.
quelle
Dies kann ohne Rundung helfen
quelle
Konvertieren Sie in eine
integer
erste und dann in einestring
:quelle
Versuchen Sie dieses, sollte funktionieren:
quelle
Wenn Sie eine CLR-Funktion verwenden, können Sie den Float in einen String konvertieren, der genau wie der Float aussieht, ohne alle zusätzlichen Nullen am Ende.
CLR-Funktion
.
Beispiel
.
Ausgabe
.
Vorbehalt
Alle konvertierten Zeichenfolgen werden mit 18 Dezimalstellen abgeschnitten, und es gibt keine nachgestellten Nullen. 18 Stellen Genauigkeit sind für uns kein Problem. Und 100% unserer FP-Nummern (fast 100.000 Werte) sehen als Zeichenfolgenwerte genauso aus wie in der Datenbank als FP-Nummern.
quelle
Die Reaktion von Axel wurde in bestimmten Fällen etwas geändert, was zu unerwünschten Ergebnissen führt.
quelle
aus der Dokumentation zu REPLACE () :
Tests:
null ==> [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
quelle
Wählen Sie
cast (replace (convert (decimal (15,2), acs_daily_debit), '.', ',') Als varchar (20)).
von acs_balance_details
quelle
Basierend auf der Antwort von Molecular:
quelle
Ich bin gerade auf eine ähnliche Situation gestoßen und war überrascht über die Rundungsprobleme von "sehr großen Zahlen", die in SSMS v17.9.1 / SQL 2017 vorgestellt wurden.
Ich behaupte nicht , ich eine Lösung haben, aber ich , dass beobachtet FORMAT präsentiert eine Zahl , die korrekt angezeigt wird . Ich kann nicht implizieren, dass dies weitere Rundungsprobleme reduziert oder innerhalb einer komplizierten mathematischen Funktion nützlich ist.
T SQL - Code geliefert, sollte klar meine Beobachtungen zeigen , während andere ermöglichen , ihren Code zu testen und Ideen die Notwendigkeit entstehen sollte.
quelle
ist der beste Weg, damit Sie
.0000
keine Ziffer am Ende des Werts hinzufügen .quelle