Удалить десятичное число, но сохранить значения - SQL - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть запрос данных - SQL Server 2014 (четвертый столбец). Приложение не обрабатывает десятичные дроби. Поэтому я должен предоставить данные без десятичных знаков. Например: если сотрудник работал 8 часов, я отправляю 8.00. Вышестоящее приложение хочет получить данные 800. Или если их меньше 8 часов, то 050 (.50) для получаса.

Мой расчет за две недели работы:

CONVERT(decimal(10, 2), dur) / 60 AS HOURS

enter image description here

Мой вопрос: как мне убрать этот десятичный знак, сохранив при этом правильные часы, чтобы 8.00 стало 800?

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

Поскольку ваше приложение ожидает лидирующие нули при значениях менее часа, вам придется его дополнить. Однако, поскольку значения могут превышать 10 часов, нам нужно обрабатывать их немного по-другому, чтобы учесть дополнительные символы в конечном результате.

Это, кажется, дает значения, которые вы ищете.

Настройка:

create table t
    (tm decimal(18,5));

insert t values (8.05999),(11.00000),(0.34111);

Запрос:

select 
    case 
        when t.tm > 10 
            then cast(cast(t.tm*100 as integer) as varchar(5)) --<-Handles longer shifts
        else right(concat('000',cast(t.tm*100 as integer)),3)  --<-Handles shorter shifts
    end as appVal
from t;

Результаты:

+--------+
| appVal |
+--------+
|    805 |
|   1100 |
|    034 |
+--------+
1 голос
/ 08 апреля 2020

Вы можете просто преобразовать часы в строку, а затем заменить десятичную на ничто. При необходимости преобразуйте строку без десятичного числа в целое число.

DECLARE @Hours DECIMAL(10, 2)

SET @Hours = 8.50

SELECT
  @Hours AS [Hours]
, REPLACE(CONVERT(VARCHAR(13), @Hours), '.', '') AS [Hours as String]
, CONVERT(INT, REPLACE(CONVERT(VARCHAR(13), @Hours), '.', '')) AS [Hours as Integer]
0 голосов
/ 09 апреля 2020

Заменен десятичный знак, как предложено @ isaa c и @ eri c -brandt. Затем заполняется только то количество значений, которое требуется вышестоящему приложению.

LEFT(REPLACE((CONVERT(decimal(10, 2), dur) / 60),'.',''),3) AS HOURS,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...