Entfernen Sie die Dezimalstellen von Zahl zu halten Tausender-Trennzeichen in Sql server?
Habe ich eine Nummer wie : 12345.678
Ich will es so : 12,345
zu entfernen ( der rest !)
einer Lösung von hinzufügen von tausenden seperator ist :
select convert(varchar(100), cast(12345.678 as money), 1)
welche ergibt : 12,345.68
Nun sollte ich entfernen Sie die .68
Stieß ich auf eine schöne Lösung mit parseName :
select parsename(convert(varchar(100), cast(12345.678 as money), 1),2)
welche ergibt : 12,345
Frage : gibt es eine besser Lösung für dieses problem ? ( vielleicht ohne Einbeziehung von anderen Funktionen/string-Manipulationen ? )
- das könnte helfen: Wie formatiere ich eine Zahl mit Komma, die in T-SQL?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine einfache Möglichkeit, dies zu tun, in SQL server 2008. SQL Server 2012 eingeführt, die FORMAT - Funktion, die ermöglicht es Ihnen, Folgendes zu tun:
(obwohl dies rundet die Zahl auf 12,346)
Formatierung der Ergebnisse ist etwas, das normalerweise nicht in den Bereich einer Datenbank - es ist etwas, was sollte gelassen werden, um Ihre front-end-Programm/web-site/Bericht/Tabellenkalkulation etc. Allerdings, wenn Sie wirklich brauchen, um dies zu tun, in SQL-Server, ich vermute, deine Lösung ist so nah, wie Sie gehen zu bekommen, es sei denn, Sie verwenden Sie die CLR-Integration zur Verknüpfung der Zeichenfolge.Format-Funktion aus .NET.
Wenn Sie gehen mit Ihrer Lösung mit parseName bewusst sein, dass es möglicherweise nicht International tätig sind (z.B. in teilen von Europa, wo
,
verwendet als Dezimaltrennzeichen). Dies kann nicht ein Problem für Sie, aber wenn es ist, dann brauchen Sie eine Lösung, die ermöglicht Ihnen die explizite Kontrolle der Formatierung.Parsename ist in der Tat eine originelle Lösung. Ich war schon immer mit
Obwohl es länger. Aber vielleicht ist ein direkter Ersatz ist schneller als eine parse-routine? In jedem Fall ist es auch nicht besser in dem Sinne, dass selbst wenn es lief 21ns schneller, in größeren Plan der Dinge, was sind Sie versuchen zu verbessern mit einer solchen Frage?
verwenden floor() für die Konvertierung in einen integer-erste :
12,345.00
..............00
. ( Frage sagt - "ENTFERNEN)Unterstütze ich Richards Bemerkung, dass dies erfolgt normalerweise in der 'Präsentation' Schicht. Warum müssen Sie dieses format in SQL Server? Werden Sie anzeigen von berichten direkt in der SQL-Server? In der Regel das erste, was jemand tut, ist das kopieren und einfügen in Excel.
Sowieso, Wenn Sie immer wickeln Sie den obigen Ausdruck in eine weitere string-Funktionen:
Gibt es noch eventuelle Fehler in diesem, und ich nicht wieder empfehlen, erfolgt dies auf SQL-Server-es sei denn, Sie generieren COBOL-wie text-Berichte.