2016-05-09 5 views
0
Separator

Als Teil einer gespeicherten SQL-Prozedur zu vermeiden (XML-Ausgabe erzeugt) I die folgende Zeile haben:Was ist der beste Weg, um dieses Stück von SQL neu zu formatieren die Tausende

FORMAT(Quantity * ld.UnitPrice, 'N2') AS '@value' 

Dies produziert perfekt akzeptable Ergebnisse seit einigen Monaten. Letzte Woche jedoch der Dienst, in dem die XML, die diese Prozedur produziert, fehlgeschlagen ist, weil der Wert mehr als tausend Pfund (Pfund) war, was die folgende Ausgabe 1,049.60 produziert.

Es wäre schön gewesen, wenn die Servicedokumentation die Tatsache erwähnt hätte, dass es keine Kommas in den Werten mochte, die als Attribute zurückliefen, aber dieses Argument ist für einen anderen Tag.

Ich bin nach ein paar Tipps, wie die beste Möglichkeit, diese eine Zeile neu zu formatieren, so dass es nichts produziert, die Tausende trennt, mit anderen Worten, ich brauche es, um die folgenden 1049.60 oder etwas ähnliches zu produzieren, wenn ein Wert über eins Tausend Pfund ist angekommen. Es muss immer noch die zwei Dezimalstellen beibehalten.

Obwohl ich speziell Pfund Sterling in Wahrheit erwähnt habe, muss dieses Format kulturneutral sein, so dass alle Zahlen, die über tausend steigen, kein Trennzeichen haben.

+7

Entfernen Sie die Funktion Format? Dann bei Bedarf konvertieren (dezimal (9,2), YourColumn) –

+0

Danke, funktioniert gut. Perfekte Lösung. –

+0

@SeanLange. . . Könnten Sie bitte Ihren Kommentar als Antwort hinzufügen, damit Dom sie akzeptieren kann? –

Antwort

2

Sie könnten wahrscheinlich die Formatfunktion entfernen. Dann erforderlich, wenn convert(decimal(9,2), YourColumn)

0

Ich will nur eine Option hinzufügen möchten, wenn Sie format Funktion halten entscheiden, es unterstützt andere Formate auch:

FORMAT(Quantity * ld.UnitPrice, '0.00') AS '@value' 
1

Sie die FORMAT-Funktion mit Format von ‚F2‘ verwenden können . 'F' ist der Festkomma-Formatbezeichner. Dies wird von allen numerischen Typen unterstützt.

DECLARE @quantity int = 65; 
DECLARE @unitPrice money = 150.33; 

SELECT FORMAT(@quantity * @unitPrice, 'F2') AS 'Amount'; 

enter image description here

See-Online> FORMAT (Transact-SQL): https://msdn.microsoft.com/en-GB/library/hh213505.aspx

MSDN> Standard Numeric Format Strings: https://msdn.microsoft.com/library/dwhawy9k.aspx

Wenn Sie jedoch Zahlen als Strings formatieren und Wenn Sie sie dann weitergeben, müssen Sie auf die Sprach- und Kultureinstellungen achten. Das Dezimaltrennzeichen kann in ein Komma umgewandelt werden.

Sie können sicherstellen, dass dies immer ein Punkt ist, indem Sie die Kultur als "en-US" für die FORMAT-Funktion angeben, die einen optionalen dritten Parameter verwendet.

SET LANGUAGE 'Portuguese'; 
SELECT FORMAT(@quantity * @unitPrice, 'F2', 'en-US') AS 'Amount'; 

enter image description here

Siehe Defensive Datenbankprogrammierung mit SQL Server von Alex Kuznetsov, von Redgate veröffentlicht> Kapitel 1: Grundlegende Defensive Datenbank Programming Techniques> Wie Sprache einstellen brechen eine Abfrage

Viele Entwickler testen ihren Code nur unter der standardmäßigen Spracheinstellung ihres Servers und testen nicht, wie ihr Code reagiert, wenn er auf einem Server mit einer anderen Spracheinstellung ausgeführt wird oder wenn die Einstellung auf Sitzungsebene geändert wird.

Bücher Online> Lokale Sprachversionen in SQL Server: https://msdn.microsoft.com/en-us/library/ee210665.aspx#BK_ConfigureOS

Verwandte Themen