2013-07-12 90 views
6

Al momento ho una query piuttosto ampia e mi manca un elemento ... Devo tagliare i dati a due cifre decimali (non è necessario arrotondare). Ho cercato su Google, ma ho avuto difficoltà ad adattarlo alla query corrente.Query SQL per troncare a due punti decimali?

SELECT 
    FechaDeSistema, Code, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN Cantidad 
    END as Debit, 
    CASE 
     WHEN CR_Socio = @SocioNum THEN Cantidad 
    END AS Credit, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN BalanceDebito 
     WHEN CR_Socio = @SocioNum THEN BalanceCredito 
    END AS Balance 
FROM 
    Ledger 
WHERE 
    (Debito_Cuenta = @Acct) OR 
    (Credito_Cuenta = @Ncct) 
ORDER BY 
    FechaDeSistema DESC 

Io fondamentalmente bisogno di troncare il Credito e "casi" di debito (che è come lo si dice così?) A due punti decimali. Come posso staccarlo? Grazie in anticipo!

risposta

6

Basta lanciarlo su un decimale inferiore di precisione, questo taglierà le cifre finali.

cast(yourColumnName as decimal(19,2)) as desiredColumnName 

Più specificamente al vostro codice di query

SELECT 
    FechaDeSistema, 
    Code, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN cast(Cantidad as decimal(19,2)) 
    END as Debit, 
    CASE 
     WHEN CR_Socio = @SocioNum THEN cast(Cantidad as decimal(19,2)) 
    END AS Credit, 
    CASE 
     WHEN DR_Socio = @SocioNum THEN cast(BalanceDebito as decimal(19,2)) 
     WHEN CR_Socio = @SocioNum THEN cast(BalanceCredito as decimal(19,2)) 
    END AS Balance 
FROM Ledger 
WHERE (Debito_Cuenta = @Acct) 
OR (Credito_Cuenta = @Ncct) 
ORDER BY FechaDeSistema DESC"; 
+0

Beh, questo è stato molto più facile di quello che stavo cercando di implementare (un pasticcio enorme). Grazie Evan! –

+0

devo aspettare un minuto o due perché io approvi la risposta ;-) –

+0

Nessun problema! Aggiunta anche una versione di Query più pulita con il cast corretto. –

5

casting sarà round. Se vuoi davvero troncare, puoi utilizzare ROUND con l'opzione troncata, come questa ..

DECLARE @MyNum DECIMAL(19,4) = 100.1294 

SELECT @MyNum 'MyNum' 
, CAST(@MyNum AS DECIMAL(19,2)) 'Cast will round' 
, ROUND(@MyNum,2,4) 'Round with truncate option' 
, CAST(ROUND(@MyNum,2,4) AS DECIMAL(19,2)) 'Better Truncate'