( Nếu bạn đang sử dụng SQL Server 2012 hoặc mới hơn, vui lòng xem câu trả lời của @ wBob để biết cách tiếp cận sạch hơn. Cách tiếp cận được nêu trong câu trả lời của tôi dưới đây chỉ được yêu cầu nếu bạn đang sử dụng SQL Server 2008 R2 trở lên. )
Bạn không cần (hoặc muốn) dấu phân cách hàng nghìn khi chuyển đổi sang NUMERIC
, bất kể đó là dấu phẩy, dấu chấm hoặc dấu cách, vì vậy hãy loại bỏ chúng trước. Sau đó chuyển đổi dấu phẩy thành dấu chấm / thập phân và bạn đã hoàn thành:
SELECT CONVERT(NUMERIC(10, 2),
REPLACE(
REPLACE('7.000,45', '.', ''),
',', '.'
)
) AS [Converted];
Trả về:
7000.45
Để hoàn thiện, tôi nên đề cập rằng tôi cũng đã thử:
SET LANGUAGE Greek;
Nhìn vào các phong cách định dạng khác nhau cho CHUYỂN ĐỔI , nhưng không có gì áp dụng ở đây.
Hàm FORMAT , nhưng loại đầu vào phải là giá trị số hoặc ngày / thời gian / thời gian (được giới thiệu trong SQL Server 2012, do đó không áp dụng cho SQL Server 2008 R2 trở lên).
Và không có gì khác dường như làm việc. Tôi đã hy vọng tìm thấy một cái gì đó thanh lịch hơn hai REPLACE
cuộc gọi, nhưng cho đến nay không có may mắn như vậy.
Ngoài ra, chỉ cần đề cập, trong khi không phải là một giải pháp T-SQL thuần túy, điều này cũng có thể được thực hiện thông qua SQLCLR. Và, có một hàm được thực hiện trước đó thực hiện điều này trong thư viện SQL # (mà tôi đã viết) có tên String_TryPudeToDecimal . Chức năng này có sẵn trong phiên bản Miễn phí và hoạt động trong mọi phiên bản SQL Server bắt đầu với SQL Server 2005:
SELECT SQL#.String_TryParseToDecimal('7.000,45', 'el-GR');
Trả về:
7000.45000000000000000000