2016-08-02 9 views
0

Ich möchte Komma in Zahlen für varchar Typ mit einem Dezimalpunkt ohne Roundup setzen.Komma in Zahl mit Dezimalpunkt in SQL Server 2008

Zum Beispiel:

DECLARE @val varchar(50) = '12345.999' 

Ich möchte das Ergebnis als:

12,345.9 

Bisher habe ich versucht:

select convert(VARCHAR(15), cast(@val as money), 1) 

Ergebnis: 12,346.00

aber es tut Rundung der Wert.

Bitte helfen. Danke im Voraus.

+0

Wenn Sie bis zu einem d abzurunden müssen Wenn Sie einen Platz in der Nähe haben, müssten Sie wahrscheinlich eine Funktion ausführen, bei der Sie den Wert * 10 als int übergeben und dann durch 10,0 teilen, bevor Sie ihn als Geld ausgeben. z.B. 'SELECT CONVERT (VARCHAR (15), CAST (CAST (@val * 10 AS INT)/10,0 AS GELD), 1)' – ZLK

+1

Wofür werden diese Daten verwendet? Es kann bessere Möglichkeiten geben, wenn wir seinen Zweck kennen. – iamdave

Antwort

2

Vielleicht funktioniert das. Verwenden Sie einfach die LEFT() Funktion ein paar Mal nach dem MONEY und VARCHAR Gießen

DECLARE @val VARCHAR(50) = '12345.99999' 

SELECT LEFT(CONVERT(VARCHAR(15),CAST(LEFT(@val, 
        CHARINDEX('.',@val,1)+1) AS MONEY),1),CHARINDEX('.',@val,1)+2) 


Result: 
12,345.9 

** bearbeiten **

Nach einigem Nachdenken über die Möglichkeit für die Variable eine größere Anzahl von mit, es wouldn‘ t Arbeit, wenn es mehrere Kommas dh 123,412,345.999 also ich bin der Bearbeitung enthalten eine CASE Aussage:

DECLARE @val VARCHAR(50) = '123412345.99999' 

SELECT LEFT(CONVERT(VARCHAR(15), 
         CONVERT(MONEY 
           ,LEFT(@val, CHARINDEX('.',@val,1)+1) 
           ,1) 
        ,1) 
      , CHARINDEX('.',@val)+(CASE 
            WHEN LEN(LEFT(@val, CHARINDEX('.',@val)-1))>6 THEN 3 
            ELSE 2 
            END)) 
+0

Hallo @bjones, Danke, es hat funktioniert. – user3583912

+0

Hallo @bjones, kann ich das gleiche für Format() in 2012 wissen? Vielen Dank. – user3583912

+0

@ user3583912 Welches Format versuchen Sie zu bekommen? – BJones

3
DECLARE @val varchar(50) = '12345.999' 

SELECT LEFT(CONVERT(VARCHAR(15),CAST(@val AS MONEY),1),CHARINDEX('.',@val)-3) + SUBSTRING(@val,CHARINDEX('.',@val)-3,5) 
+1

bjones gewinnt. Ich denke, wir haben fast die gleiche Antwort im Abstand von zwei Minuten gefunden. – DaveX

+0

Hi DaveX, dein ist auch gearbeitet. und kann ich das auch für format() in 2012 wissen? Vielen Dank. – user3583912