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

SQL Server - CAST VÀ DIVIDE

Hãy thử điều này ..

DECLARE @table table(XYZ VARCHAR(8) , id int)

INSERT INTO @table
SELECT '4000', 1
UNION ALL
SELECT '3.123', 2
UNION ALL
SELECT '7.0', 3
UNION ALL
SELECT '80000', 4
UNION ALL
SELECT NULL, 5
UNION ALL
SELECT 'WTF',6

SELECT CASE 
     WHEN ISNUMERIC(XYZ) = 0 THEN NULL
     WHEN CHARINDEX('.',XYZ,0) < LEN(XYZ)-2 AND CHARINDEX('.',XYZ,0) > 0 THEN XYZ
     WHEN ISNUMERIC(XYZ) >0  then  convert(decimal(18,3),xyz) / 1000.000
     ELSE NULL
END
  FROM @table

Đầu ra

4.00000000000
3.12300000000
0.00700000000
80.00000000000
NULL
NULL

Chỉnh sửa - để giữ đến 3 chữ số thập phân trong đầu ra, hãy thực hiện việc này

SELECT convert(decimal(8,3),CASE 
     WHEN ISNUMERIC(XYZ) = 0 THEN NULL
     WHEN CHARINDEX('.',XYZ,0) < LEN(XYZ)-2 AND CHARINDEX('.',XYZ,0) > 0 THEN XYZ
     WHEN ISNUMERIC(XYZ) >0  then  convert(decimal(18,3),xyz) / 1000.000
     ELSE NULL
END)
  FROM @table

Lưu ý rằng (8,3) xác định điều này, tổng độ chính xác 8 chữ số, 3 sau điểm.

Bạn cũng có thể muốn chuyển đổi lại thành varchar (8)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chức năng so với Thủ tục được lưu trữ

  2. Tôi cần chuyển tên cột bằng cách sử dụng biến trong câu lệnh select trong Thủ tục lưu trữ nhưng tôi không thể sử dụng truy vấn động

  3. trục sql với các cột động

  4. Nhận tổng giá trị của một cột nhất định từ GridView

  5. Lặp lại mà không cần con trỏ trong SQL Server 2005