Đừ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
ởwhere
mệ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
ởwhere
mệ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: http://sqlfiddle.com/#!3/09a34 / 4
-
LIKE
- http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx