Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server - CAST AND DIVIDE

Опитайте това...

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

Изход

4.00000000000
3.12300000000
0.00700000000
80.00000000000
NULL
NULL

Редактиране - за да запазите до 3 знака след десетичната запетая в изхода, направете това

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

Обърнете внимание, че (8,3) дефинира това, обща точност 8 цифри, 3 след точката.

Може също да искате да конвертирате обратно към 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. Заменете първото появяване на подниз в низ в SQL

  2. TSQL Shred XML - Работа с пространства от имена

  3. Как да премахнете ограничението по подразбиране на SQL, без да знаете името му?

  4. С SQL можете ли да използвате подзаявка в клауза WHERE LIKE?

  5. Как да разделя (разделя) низ със запетая в съхранена процедура на SQL Server