2008-08-06 49 views
7

Với ràng buộc chỉ sử dụng T-Sql trong Sql Server 2005, có cách nào tốt hơn để loại bỏ dấu thập phân từ một kiểu dữ liệu tiền hơn chuyển đổi sang VARCHAR) và sau đó thay thế dấu thập phân?T-Sql Loại bỏ điểm thập phân khỏi loại dữ liệu tiền

Đây là những gì tôi hiện có.

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '') 

Trả về mong muốn 123 và 1999, nhưng tôi đã tự hỏi liệu có cách nào tốt hơn không. Có suy nghĩ gì không?

Trả lời

6

Nhân với 100 và sau đó chuyển thành int.

0

Bạn có thể cụ thể hơn một chút về trường hợp sử dụng không? Loại bỏ dấu thập phân từ biểu diễn hơi khác thường do bạn sẽ mất tất cả thông tin về thang đo. Bạn có giả định rằng sẽ luôn có hai chữ số? Nếu vậy, bạn có thể đơn giản hóa nhân với 100 và sau đó làm tròn trước khi chuyển đổi thành chuỗi.

0

Hãy nhớ rằng loại dữ liệu tiền có thể có tối đa 4 chữ số sau dấu thập phân. Các giá trị có nhiều hơn hai chữ số có thể không hoạt động như mong đợi đối với giải pháp gốc của bạn hoặc mẹo x100.

3

Bạn sẽ không bao giờ sử dụng loại dữ liệu tiền để lưu trữ các giá trị tiền tệ. Nếu bạn thực hiện bất kỳ phép tính nào, bạn sẽ nhận được kết quả cắt ngắn. Chạy phần sau đây để thấy những gì tôi có nghĩa là

DECLARE 
@mon1 MONEY, 
@mon2 MONEY, 
@mon3 MONEY, 
@mon4 MONEY, 
@num1 DECIMAL(19,4), 
@num2 DECIMAL(19,4), 
@num3 DECIMAL(19,4), 
@num4 DECIMAL(19,4) 

SELECT 
@mon1 = 100, @mon2 = 339, @mon3 = 10000, 
@num1 = 100, @num2 = 339, @num3 = 10000 

SET @mon4 = @mon1/@mon2*@mon3 
SET @num4 = @num1/@num2*@num3 

SELECT @mon4 AS moneyresult, 
@num4 AS numericresult 

Output: 2949,0000 2949,8525

0

Đây là sự kỳ diệu:

DataFormatString="{0:c0} 

này sẽ loại bỏ các chữ số thập phân.

+1

Ràng buộc ban đầu là nó chỉ có thể ở trong T-Sql. DataFormatString là một điều .Net. – Pete

Các vấn đề liên quan