Пользовательское преобразование десятичного значения в sql - PullRequest
3 голосов
/ 10 марта 2019

Я должен настроить конкретное значение столбца запроса. где у меня есть четыре типа дел, как

  empcode AbsentDays
  1       0.00
  6       0.50
  2       1.00
  3       1.50
  4       2.00
  5       2.50

и мой ожидаемый результат будет выглядеть как

  1       0
  6       0.5
  2       1
  3       1.5
  4       2
  5       2.5

Для этого я попробовал это написано ниже

AbsentDays = case 
                when AbsentDays = 0.00 
                   then convert(int, AbsentDays) 
                when AbsentDays >= 1.00 
                   then convert(decimal(10, 1), AbsentDays)
                -- when AbsentDays = 0.50 
                --    then 0.5
            end

Но с помощью этого я не могу получить желаемый результат, он переопределяет другие значения.

Ответы [ 3 ]

2 голосов
/ 10 марта 2019

Столбец может иметь только один тип данных. Чтобы увидеть различные случаи описанными вами способами, вам нужно использовать тип данных varchar / nvarchar:

AbsentDays = case 
                when AbsentDays = floor(AbsentDays)
                   then convert(nvarchar(max),convert(int, AbsentDays)) -- change to int if no decimal part
                else convert(nvarchar(max),convert(decimal(10, 1), AbsentDays)) -- else return one decimal
              end
0 голосов
/ 10 марта 2019

Не разыгрывайте с плавающей точкой, вы потеряете в точности.

SELECT FORMAT(CAST(2.0 AS DECIMAL(9,6)), 'g15') -- will print 2
SELECT FORMAT(CAST(0.50 AS DECIMAL(9,6)), 'g15') -- will print 0.5
0 голосов
/ 10 марта 2019

Вы можете сделать это, приведя его к float, поскольку самые правые нули после десятичной точки обрезаются в float:

select empcode, cast(AbsentDays as float)
from tbl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...