У меня есть функция 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 и округлить до двух знаков после запятой в моем существующем STUFF(CASE AS NVARCHAR)
?
2 ответа
CAST
в десятичное с двумя значениями после точки, а затем в varchar
CAST(CAST(jrt.run_lbr_hrs * 60 AS DECIMAL(10, 2)) AS VARCHAR(20))
Измените десятичный размер на то, что вам нужно
CAST(CAST(jrt.run_lbr_hrs * 60 AS DECIMAL(7, 2) AS VARCHAR(20)))
, но получаю "Неверный синтаксис рядом с ключевым словом "AS"" для этой строки.
Попробуйте это Str (jrt.run_lbr_hrs * 60, 2)
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
SQL Server
из синтаксиса (использование функцийFOR XML PATH
иSTUFF()
)