sql >> Database >  >> RDS >> Sqlserver

SQL Server - CAST EN DIVIDE

Probeer dit..

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

Uitgang

4.00000000000
3.12300000000
0.00700000000
80.00000000000
NULL
NULL

Bewerken - om de uitvoer tot op 3 decimalen te houden, doe dit

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

Merk op dat (8,3) dit definieert, totale precisie 8 cijfers, 3 na de punt.

Misschien wilt u ook terug naar varchar(8) converteren



  1. Laravel 5 PDOException kon stuurprogramma niet vinden

  2. MySQL-query waarbij JOIN afhankelijk is van CASE

  3. Hoe automatisch met 2 te verhogen voor een bepaalde tabel in mysql

  4. kan niet schrijven naar logbestand pg_upgrade_internal.log bij het upgraden van Postgresql 9.1 naar 9.3