Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Server - CAST DAN DIVIDE

Coba ini..

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

Keluaran

4.00000000000
3.12300000000
0.00700000000
80.00000000000
NULL
NULL

Sunting - untuk mempertahankan hingga 3 tempat desimal dalam output, lakukan ini

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

Perhatikan (8,3) mendefinisikan ini, presisi total 8 digit, 3 setelah titik.

Anda mungkin ingin mengonversi kembali ke varchar(8) juga



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Modul yang ditentukan tidak dapat ditemukan. Pengecualian dari HRESULT:0x8007007E

  2. Urutan hierarki dari hasil kueri rekursif di SQL 2005

  3. Coldfusion:Berurusan dengan nilai Null di Bidang Tanggal

  4. Bagaimana cara mengatur database default di Sql Server dari kode?

  5. Kolom apa yang umumnya membuat indeks bagus?