Scrivi un numero con due decimali SQL Server


Risposte:


213

prova questo

SELECT CONVERT(DECIMAL(10,2),YOURCOLUMN)

2
Se questa era la risposta 10 anni fa, non lo è più. Questo metodo trasformerebbe 10.11111 in 10.00.
Jonathon Cowley-Thom

Ho provato SELECT CONVERT (DECIMAL (10,2), 10.11111) ha restituito lo stesso risultato 10.11 per SELECT CONVERT (DECIMAL (10,2), '10.11111') era in SQL Server 2008 R2
SKCS Kamal

70

Usa la Str()funzione. Sono necessari tre argomenti (il numero, il numero totale di caratteri da visualizzare e il numero di posizioni decimali da visualizzare

  Select Str(12345.6789, 12, 3)

visualizza: '12345.679' (3 spazi, 5 cifre 12345, un punto decimale e tre cifre decimali (679). - arrotonda se deve troncare (a meno che la parte intera non sia troppo grande per la dimensione totale, nel qual caso vengono invece visualizzati gli asterischi.)

per un totale di 12 caratteri, con 3 a destra del punto decimale.


1
it rounds if it has to truncate... a meno che la parte intera non sia troppo grande per la dimensione totale, nel qual caso vengono visualizzati gli asterischi. Questo è menzionato nella documentazione diSTR . Ecco una citazione da quella pagina:STR(1223,2) truncates the result set to **.
Mark Byers,

36

Generalmente è possibile definire la precisione di un numero in SQL definendolo con parametri. Nella maggior parte dei casi questo sarà NUMERIC(10,2)oDecimal(10,2) - definirà una colonna come un Numero con 10 cifre totali con una precisione di 2 (cifre decimali).

A cura di chiarezza


4
Può anche essere dichiarato DECIMAL (10, 2).
jrcs3,

10
Questo è sbagliato per diversi motivi. Non è un numero, è numerico o decimale. Dici che numerico (10,2) consente 10 posizioni prima del punto decimale, che è anche sbagliato. numerico (10,2) consente 10 cifre totali con 2 posizioni dopo il punto decimale. Intervallo = da -99999999,99 a 99999999,99
George Mastros,

@G Mastros: sembra che tu abbia ragione sul punto di precisione. Sulla denominazione effettiva della convenzione, in molte delle implementazioni SQL NUMBER è un tipo valido. Anche se ammetterò di non conoscere il caso di sqlserver
AAA

@GMastros è venuto a dire la stessa cosa. msdn.microsoft.com/en-us/library/aa258832%28v=sql.80%29.aspx
Joe

19

Questo lavoro per me e mantiene sempre frazioni di due cifre

23.1 ==> 23.10

25.569 ==> 25.56

1 ==> 1.00

Cast(CONVERT(DECIMAL(10,2),Value1) as nvarchar) AS Value2

Screenshot del codice


2
prova la funzione STR () di Charles Bretana sopra. Funziona come la tua formula ma eseguirà un arrotondamento sul tuo esempio 25.569.
JerryOL,

15

Ecco come lo fanno oggi i bambini:

DECLARE @test DECIMAL(18,6) = 123.456789
SELECT FORMAT(@test, '##.##')

123.46


1
La funzione FORMATO è disponibile dalla versione 2012 in poi.
user1263981

oppure: SELEZIONA FORMATO (@test, '. ##')
java-love il

Se i dati di input erano: DECLARE @test DECIMAL(18,6) = 0.456789 quindi SELECT FORMAT(@test, '##.##')restituisce: .46 Come si ottiene per mostrare lo zero iniziale 0.46:?
luisdev,

Per ottenere uno 0 iniziale, prova a SELEZIONARE FORMATO (@test, '# 0. ##')
ClubbieTim

14

Se hai solo bisogno di due cifre decimali, il modo più semplice è ...

SELECT CAST(12 AS DECIMAL(16,2))

O

SELECT CAST('12' AS DECIMAL(16,2))

Produzione

12.00

7

Se stai bene arrotondando il numero invece di troncarlo, allora è solo:

ROUND(column_name,decimals)

2

Prova questo:

 declare @MyFloatVal float;

    set @MyFloatVal=(select convert(decimal(10, 2), 10.254000))

    select  @MyFloatVal

    Convert(decimal(18,2),r.AdditionAmount) as AdditionAmount

0

Moltiplicare il valore che si desidera inserire (es. 2,99) per 100

Quindi inserire la divisione per 100 del risultato aggiungendo .01 alla fine:

299.01/100

0

Ciò consentirà un totale di 10 cifre con 2 valori dopo il decimale. Significa che può contenere il valore prima dei decimali fino a 8 cifre e 2 dopo i decimali.

Per convalidare, inserire il valore nella seguente query.

DECLARE vtest  number(10,2);
BEGIN
SELECT 10.008 INTO vtest FROM dual;
dbms_output.put_line(vtest);
END;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.