2013-07-12 25 views
6

Tôi có một truy vấn khá lớn vào lúc này và tôi thiếu một phần tử ... Tôi cần cắt dữ liệu thành hai dấu thập phân (không cần làm tròn). Tôi đã Google nhưng đã gặp sự cố khi thích ứng với truy vấn hiện tại.Truy vấn SQL để cắt ngắn thành hai dấu thập phân?

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 

Về cơ bản, tôi cần cắt bớt "các trường hợp" tín dụng và ghi nợ (là cách bạn nói?) Thành hai chữ số thập phân. Làm thế nào tôi có thể kéo nó ra? Cảm ơn trước!

Trả lời

6

Chỉ cần truyền nó đến một số thập phân chính xác thấp hơn, điều này sẽ cắt các chữ số cuối.

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

Cụ thể hơn để mã truy vấn của bạn

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

Vâng đó là xa dễ dàng hơn so với những gì tôi đã cố gắng để thực hiện (một số lộn xộn khổng lồ). Cảm ơn Evan! –

+0

phải chờ một hoặc hai phút để tôi phê duyệt câu trả lời ;-) –

+0

Không sao cả! Cũng đã thêm phiên bản Truy vấn sạch hơn với cách truyền chính xác. –

5

đúc sẽ tròn. Nếu bạn thực sự muốn cắt ngắn bạn có thể sử dụng ROUND với các tùy chọn truncate, như thế này ..

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' 
Các vấn đề liên quan