sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server - CAST OG DIVIDE

Prøv dette..

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

Output

4.00000000000
3.12300000000
0.00700000000
80.00000000000
NULL
NULL

Rediger - for at holde dig til 3 decimaler i output gør du dette

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

Bemærk, at (8,3) definerer dette, total præcision 8 cifre, 3 efter punktet.

Du ønsker måske også at konvertere tilbage til varchar(8)



  1. En uventet bivirkning ved at tilføje et filtreret indeks

  2. Hvordan tilknytter man en bruger til flere skemaer i en database?

  3. Hurtigste måde at tjekke for eksisterende post, inden du indsætter [mysql_errno()]

  4. Forsøger at undgå en cirkulær reference