2016-10-20 4 views
-1

ich erlebe, was ich als völlig unerwartetes Verhalten beschreiben, wenn ich einen float Wert entweder durch LTRIM oder RTRIM passieren:LTRIM und RTRIM Abschneiden Gleitkommazahl

CREATE TABLE MyTable 
(MyCol float null) 

INSERT MyTable 
values (11.7333335876465) 

SELECT MyCol, 
     RTRIM(LTRIM(MyCol)) lr, 
     LTRIM(MyCol) l, 
     RTRIM(MyCol) r 
FROM MyTable 

, die die folgenden Ergebnisse liefert:

MyCol    | lr  | l  | r 
-------------------------------------------- 
11.7333335876465 | 11.7333 | 11.7333 | 11.7333 

Ich habe das gleiche Verhalten auf SQL Server 2014 und 2016 beobachtet.

Jetzt, meine Verständnis ist, dass LTRIM und RTRIM nur Leerraum von einem Wert abstreifen sollte - nicht umwandeln/abschneiden.

Hat jemand eine Idee, was hier vor sich geht?


Nur um den Hintergrund zu erklären. Ich erzeuge SQL-Abfragen mit den Eigenschaften eines Satzes von C# -POCOs (die Ergebnisse werden verwendet, um einen MD5-Hash zu erzeugen, der dann mit einem äquivalenten Wert aus einer Oracle-Tabelle verglichen wird) und aus praktischen Gründen jede Spalte mit LTRIM/RTRIM umschließt .

+2

Sieht aus wie es in eine Zeichenfolge ist, um die Funktion Anforderungen passen. Nichts Seltsames daran –

+4

Warum versuchen Sie, Weißraum irgendwie von etwas vom "Floss" -Datentyp zu trimmen? Es wird niemals welche geben. Dies kann nur für Zeichenfolgendarstellungen gelten. –

+2

So erhalten Sie unerwartetes Verhalten, wenn Sie eine Zeichenfolgenfunktion mit einem Gleitkommawert verwenden. Dann tu es nicht. –

Antwort

1

Vielleicht können Sie verwenden Format() statt

Declare @F float = 11.7333335876465 
Select format(@F,'#.##############') 

Returns

11.7333335876465