2015-07-24 68 views
5

Voglio solo ottenere il formato numerico corretto qui in Germania, quindi ho bisogno di mostrare le virgole come separatore decimale invece di punti. Ma questo ...Mostra virgola anziché il punto come separatore decimale

DECLARE @euros money 
SET @euros = 1025040.2365 
SELECT CONVERT(varchar(30), @euros, 1) 

Displays 1,025,040.24 invece di 1.025.040,24 (o 1025040,24). In C# sarebbe semplice fornire l'appropriato CultureInfo ma come farlo in T-SQL?

Ho davvero bisogno di usare REPLACE? Ma anche se, come sostituire correttamente 1,025,040.24?

+0

formattazione è una proprietà di visualizzazione, perché avrebbero mai voglia di fare questo in SQL? – Jamiec

+0

Qual è il risultato previsto per il valore '1.025.040.24', cosa ne pensi? – PankajExplorer

+0

@Jamiec: perché è una vista. Ma hai ragione, potrebbe essere fatto nell'applicazione client. Ma in questo caso voglio controllare tutto dal database. –

risposta

11

Bene, per quanto ne so, non ci sono opzioni specifiche della cultura per la conversione disponibile.

così si può farlo utilizzando sostituisce (sì, sembra un po 'brutto ...)

select 
    replace(replace(replace(convert(varchar(30), @euros, 1), ',', '|'), '.', ','), '|', '.') 

Idea: primo cambiamento virgola per qualcosa, poi cambiare punto per virgola, e poi "qualcosa" di nuovo puntare.

+0

Sì, la catena di "REPLACE" è il meglio che puoi fare. –

+0

la query tim sta funzionando bene per il mio DB mi sta dando 1.025.040.24 senza fare nulla perché? – wiretext

+0

@tinka: non voglio il formato inglese voglio tedesco (e altri) che è '1.025.040,24' –

3
DECLARE @euros money 
SET @euros = 1025040.2365 
SELECT REPLACE(CONVERT(varchar(30), @euros, 0), '.', ',') 

dovrebbe farlo (almeno per ottenere 1025040,24)

0

Si potrebbe usare replace qualcosa di simile:

DECLARE @euros money 
SET @euros = 1025040.2365 

SELECT REPLACE(REPLACE(CONVERT(varchar(30), @euros, 1),',',''),'.',','); 

SQL Fiddle Demo

0

È prima possibile sostituire separatore delle migliaia virgola (,) a una stringa di lunghezza zero (''), e quindi è possibile sostituire Decimal ('.') in virgola (',') nella stessa istruzione select.

6

Per fornire le informazioni sulla cultura appropriate, in SQL 2012 è disponibile la funzione FORMAT(). Ecco un esempio:

declare @f float = 123456.789; 

select 
    [raw]  = str(@f,20,3) 
,[standard] = cast(format(@f, 'N', 'en-US') as varchar(20)) 
,[European] = cast(format(@f, 'N', 'de-de') as varchar(20)) 

rendimenti

raw     |standard |European | 
---------------------|-----------|-----------| 
      123456.789 |123,456.79 |123.456,79 | 

È inoltre possibile specificare nel secondo parametro una stringa di formato personalizzato con le stesse regole per NET.

Documenti: https://msdn.microsoft.com/en-US/library/hh213505.aspx

Problemi correlati