Đừng lo lắng về việc điều này sẽ hiệu quả như thế nào:
Select convert(decimal(28,10), rtrim(ltrim(replace(REPLACE(AdditionalDescription,'%',''), ',','.')))) As AdditionalDescription
from PriceTerm
where AdditionalDescription like '%[%]%'
Giải thích:
- Xóa% bằng cách thay thế bằng dấu cách
- Thay thế
,với. - Xóa mọi dấu cách ở đầu hoặc cuối.
- Chuyển đổi thành
decimal(28, 10).
Cập nhật:
Theo thông tin bổ sung của OP.
Select
convert(decimal(28,10),replace(replace(replace(rtrim(ltrim(AdditionalDescription)), ' ',''),',','.'),'%','')) AS PercentAddition
from test
where replace(rtrim(ltrim(AdditionalDescription)), ' ','')
like '[0-9]%[,.]%[%0-9]'
and
isnumeric(replace(replace(replace(rtrim(ltrim(AdditionalDescription)), ' ',''),',','.'),'%',''))=1
Giải thích về '[0-9]%[,.]%[%0-9]' :
-
[0-9]- Chúng tôi chỉ quan tâm khi dữ liệu bắt đầu bằng một số. -
%- Sau số, nó có thể chứa bất kỳ ký tự nào. Chúng tôi chăm sóc không phải số vớiisnumericởwheremệnh đề. -
[,.]- Chúng tôi có dữ liệu để có,hoặc.. -
%- Sau[,.]nó có thể chứa bất kỳ ký tự nào. Chúng tôi chăm sóc không phải số vớiisnumericởwheremệnh đề. -
[%0-9]- Chúng tôi muốn dữ liệu kết thúc bằng chữ số hoặc%.
Lưu ý: Bạn sẽ phải sửa đổi '[0-9]%[,.]%[%0-9]' khi bạn tìm thấy nhiều ký tự xấu hơn.
Tài liệu tham khảo:
- SQLFiddle để chơi với: https://sqlfiddle.com/#!3/09a34 / 4
-
LIKE- https://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx