Я постоянно использую этот фрагмент кода на многих объектах, когда пытаюсь определить количество десятичных знаков после «.».Целевая система, в которую я перемещаю данные, может обрабатывать только 2 dp. Поэтому мы находим данные с> 2 dp, умножаем их на 10, 100, 1000, а также умножаем значение поля «цена за» на тот же коэффициент.
SELECT
HQPROD, [HQPR1],
Decimals = CASE Charindex('.', [HQPR1])
WHEN 0 THEN 0
ELSE LEN(CAST(CAST(REVERSE(CONVERT(VARCHAR(50), [HQPR1], 128)) AS FLOAT) AS BIGINT))
END
FROM
[SM_REP].[dbo].[BPCSF64_HQT]) EDP ON P.HQPROD = EDP.HQPROD
Тип столбца, с которым я работаю - DECIMAL(15,5)
.
Пример данных:
HQPROD HQPR1
--------------------------
47001-RM64 175.89900
47001-T06OX 5.84500
47002-20T 80.44700
47002-T24 98.10300
47002-T32 144.07000
47003-01 1.54000
47003-02 1.54000
47003-03 0.51000
Сообщение об ошибке:
Ошибка преобразования типа данных varchar в число с плавающей точкой.