Не могу конвертировать Char в деньги - PullRequest
0 голосов
/ 09 октября 2019

получая эту ошибку при попытке преобразовать столбец в денежное значение Msg 235, уровень 16, состояние 0, строка 10 Не удается преобразовать значение символа в деньги. Значение char имеет неверный синтаксис.

 CONVERT(MONEY, LEFT(SubSTRING(l.LineIDNumber, PATINDEX('%[0-9.-]%', l.LineIDNumber), 10),
           PATINDEX('%[^0-9.-]%', SUBSTRING(l.LineIDNumber, PATINDEX('%[0-9.-]%', l.LineIDNumber), 10) + 'X') -1)) as PriorPremium,

1 Ответ

2 голосов
/ 09 октября 2019

Без выборки ваших данных это чисто предположение.

Может показаться, что у вас есть поле в наборе данных, которое вы пытаетесь преобразовать, которое имеет 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 имеет неверный синтаксис.

Вам необходимо очистить данные, прежде чем их можно преобразовать.

...