это не из-за того, что вы фильтруете данные, из-за того, где вы находитесь, а потому, что вы выбрали меньшую длину данных при приведении. Вы должны изменить его на DECIMAL (8,2), или там указана максимальная длина данных вашего столбца. Вы можете попробовать следующий пример, который объяснит вам, как это работает.
Следующее будет работать, поскольку оно не извлекает никаких данных
WITH yourTable AS (
SELECT 1 AS ID, '1.1' AS Value UNION ALL
SELECT 2, '11.1' UNION ALL
SELECT 3, '11111.1313'
)
SELECT Id, CAST(value as decimal(4,1)) AS Id_casted
FROM yourTable WHERE yourTable.ID=4
Следующее не будет работать, так как десятичное значение превышает преобразование длина
WITH yourTable AS (
SELECT 1 AS ID, '1.1' AS Value UNION ALL
SELECT 2, '11.1' UNION ALL
SELECT 3, '11111.1313'
)
SELECT Id, CAST(value as decimal(4,1)) AS Id_casted
FROM yourTable WHERE yourTable.ID=3
Вы можете решить эту проблему, изменив десятичную (4,1) = 3 ди git на десятичную (8,2) = 6 ди git
WITH yourTable AS (
SELECT 1 AS ID, '1.1' AS Value UNION ALL
SELECT 2, '11.1' UNION ALL
SELECT 3, '11111.1313'
)
SELECT Id, CAST(value as DECIMAL(8,2)) AS Id_casted
FROM yourTable WHERE yourTable.ID=3
Простой следующий код показывает, что он генерирует исключение, так как максимальное значение будет 999,99 для чисел c (5,2), а когда вы назначите 1000, оно выдаст исключение
DECLARE @aritherror NUMERIC(5,2)
SET @aritherror = 1000.554
SELECT @aritherror