Умножить значение, округлить в меньшую сторону и ВЫПОЛНИТЬ выбор в SQL

#sql #sql-server-2008-r2

#sql #sql-server-2008-r2

Вопрос:

У меня есть функция SQL, которая собирает время работы из нескольких записей и использует STUFF(CAST AS VARCHAR(20)) для объединения их в один столбец во временной таблице.

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

Обновление: Забыл упомянуть, я использую SQL Server 2008 R2

Вот мой код.

   @site nvarchar(20)
  ,@item nvarchar(30)
  ,@enviro nvarchar(30))
RETURNS nvarchar(MAX)
AS
BEGIN
    DECLARE @LbrHours AS nvarchar(MAX) = ''

    IF @enviro = 'Test'
    BEGIN
        IF @site = 'Arborg'
        BEGIN
            SET @LbrHours = STUFF((SELECT ','   CAST(jrt.run_lbr_hrs AS VARCHAR(20))
                            FROM Arborg_Test_App.dbo.jobroute AS jbr
                                INNER JOIN Arborg_Test_App.dbo.job AS job
                                    ON job.job = jbr.job 
                                    AND job.suffix = jbr.suffix
                                INNER JOIN Arborg_Test_App.dbo.item AS itm
                                    ON itm.job = job.job
                                INNER JOIN Arborg_Test_App.dbo.jrt_sch AS jsh
                                    ON jbr.job = jsh.job 
                                    AND jbr.suffix = jsh.suffix 
                                    AND jbr.oper_num = jsh.oper_num
                                LEFT OUTER JOIN Arborg_Test_App.dbo.jrt_sch AS jrt
                                    ON jbr.job = jrt.job
                                    AND jbr.suffix = jrt.suffix
                                    AND jbr.oper_num = jrt.oper_num
                            WHERE  job.suffix = '0' and job.type = 'S' AND itm.item IS NOT NULL
                                AND itm.item = @item 
                                AND jbr.suffix = CASE -- Return Standard cost if Standard Operation exist, else return current cost
                                                    WHEN itm.cost_type = 'S'
                                                        THEN '1' -- '1' for standard operation
                                                    ELSE '0' -- '0' for current operations
                                                  END
                            ORDER BY itm.item, jbr.oper_num
                            FOR XML PATH('')), 1, 1, '')
            END 
        END

    RETURN @LbrHours
END
  

jrt.run_lbr_hrs это столбец, который содержит время работы в часах в таблице нашей ERP. Как я могу умножить это на 60 и округлить до 2 десятичных знаков с помощью in my existing STUFF(CASE AS NVARCHAR) ?

Комментарии:

1. Похоже SQL Server на синтаксис (использование FOR XML PATH и STUFF() функция)

2. Да, SQL 2008 R2. Извините, это был сумасшедший день.

Ответ №1:

CAST к десятичной системе счисления со значением 2 после точки, а затем к varchar

 CAST(CAST(jrt.run_lbr_hrs * 60 AS DECIMAL(10, 2)) AS VARCHAR(20))
  

Измените десятичное измерение на то, что вам нужно

Комментарии:

1. Спасибо за ответ, я использовал CAST(CAST(jrt.run_lbr_hrs * 60 AS DECIMAL(7, 2) AS VARCHAR(20))) , но я получаю «Неправильный синтаксис рядом с ключевым словом ‘AS'» для этой строки.

Ответ №2:

Попробуйте это Str (jrt.run_lbr_hrs * 60, 2)

Комментарии:

1. Не могли бы вы добавить некоторые пояснения относительно того, почему ваше решение работает?

2. Это стандартная функция сервера mssql, в лучшем случае вы можете получить небольшое изменение кода в str (jrt.run_lbr_hrs * 60, 10, 2)