Без выборки ваших данных это чисто предположение.
Может показаться, что у вас есть поле в наборе данных, которое вы пытаетесь преобразовать, которое имеет 2 или более периодов.
declare @test char(12) = '3445.76'
select CONVERT(MONEY, LEFT(SubSTRING(@test, PATINDEX('%[0-9.-]%', @test), 10),
PATINDEX('%[^0-9.-]%', SUBSTRING(@test, PATINDEX('%[0-9.-]%', @test), 10) + 'X') -1)) as PriorPremium
Приведенное выше возвращает значение 3445,76
declare @test char(12) = '34a5.76'
select CONVERT(MONEY, LEFT(SubSTRING(@test, PATINDEX('%[0-9.-]%', @test), 10),
PATINDEX('%[^0-9.-]%', SUBSTRING(@test, PATINDEX('%[0-9.-]%', @test), 10) + 'X') -1)) as PriorPremium
Приведенное выше возвращает 34,00
declare @test char(12) = '34.45.76'
select CONVERT(MONEY, LEFT(SubSTRING(@test, PATINDEX('%[0-9.-]%', @test), 10),
PATINDEX('%[^0-9.-]%', SUBSTRING(@test, PATINDEX('%[0-9.-]%', @test), 10) + 'X') -1)) as PriorPremium
Возвращает указанную вами ошибку
Сообщение 235, уровень16, состояние 0, строка 3 Не удается преобразовать значение символа в деньги. Значение char имеет неверный синтаксис.
Вам необходимо очистить данные, прежде чем их можно преобразовать.