Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để ép chuỗi con SQL thành số thập phân?

Đừ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:

  1. Xóa% bằng cách thay thế bằng dấu cách
  2. Thay thế , với .
  3. Xóa mọi dấu cách ở đầu hoặc cuối.
  4. 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ới isnumericwhere 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ới isnumericwhere 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:

  1. SQLFiddle để chơi với: http://sqlfiddle.com/#!3/09a34 / 4
  2. LIKE - http://msdn.microsoft.com /en-us/library/ms179859(v=sql.90).aspx


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tôi có thể sử dụng Tư cách thành viên ASP.NET với SQL Server Compact Edition không?

  2. Làm cách nào để kết nối với cơ sở dữ liệu SQL Server 2008 bằng JDBC?

  3. mssql chuyển đổi varchar thành float

  4. ABS () Ví dụ trong SQL Server

  5. EF 6 - Cách thực hiện chính xác các truy vấn song song