Ошибка преобразования типа данных varchar в float

Вопрос:Поиск и поиск по SO и не может понять это Пробовал CASTING в каждом поле как FLOAT безрезультатно, конвертер не получил меня дальше Как я могу получить предложение ниже case, чтобы вернуть значение, указанное в разделе THEN? Ошибка: Msg 8114, уровень 16, состояние 5, строка 1 Ошибка преобразования типа данных varchar в float. моего SQL-запроса,

Вопрос:

Поиск и поиск по SO и не может понять это
Пробовал CASTING в каждом поле как FLOAT безрезультатно, конвертер не получил меня дальше
Как я могу получить предложение ниже case, чтобы вернуть значение, указанное в разделе THEN?

Ошибка:
Msg 8114, уровень 16, состояние 5, строка 1
Ошибка преобразования типа данных varchar в float.

моего SQL-запроса, который делает ошибку:

When cust_trendd_w_costsv.terms_code like ‘%[%]%’ and (prod.dbo.BTYS2012.average_days_pay) — (substring(cust_trendd_w_costsv.terms_code,3,2)) <= 5 THEN prod.dbo.cust_trendd_w_costsv.terms_code

average_days_pay = float
terms_code = char

Ура!

Лучший ответ:

Попробуйте использовать ISNUMERIC для обработки строк, которые нельзя преобразовать:

When cust_trendd_w_costsv.terms_code like ‘%[%]%’ and (prod.dbo.BTYS2012.average_days_pay) — (case when isnumeric(substring(cust_trendd_w_costsv.terms_code,3,2))=1 then cast(substring(cust_trendd_w_costsv.terms_code,3,2) as float) else 0 end) <= 5 THEN prod.dbo.cust_trendd_w_costsv.terms_code Ответ №1

Проблема, с которой вы сталкиваетесь, заключается в том, что вы специально ищете строки, содержащие символ %, а затем преобразовывая их (неявно или явно) в float.

Но строки, содержащие знаки %, не могут быть преобразованы в float, в то время как у них все еще есть %. Это также приводит к ошибке:

select CONVERT(float,’12.5%’)

Если вы хотите конвертировать в float, сначала нужно удалить знак %, например:

CONVERT(float,REPLACE(terms_code,’%’,»))

просто устранит его. Я не уверен, есть ли другие символы в столбце terms_code, которые могут также отключить его.

Вам также необходимо знать, что SQL Server может довольно агрессивно переупорядочить операции и поэтому может попытаться выполнить вышеуказанное преобразование в других строках в terms_code, даже те, которые не содержат %. Если это источник вашей ошибки, вам необходимо предотвратить этот агрессивный переупорядочивание. Если нет агрегатов, выражение CASE обычно может избежать наихудших проблем – убедитесь, что все строки, которые вы не хотите обрабатывать, устраняются более ранними предложениями WHEN, прежде чем пытаться преобразовать

Ответ №2

Если вы уверены, что Substring Part возвращает числовое значение, вы можете вставить подстроку (….) в Float:

…..and (prod.dbo.BTYS2012.average_days_pay) — (CAST(substring(cust_trendd_w_costsv.terms_code,3,2)) as float ) <= 5 ….

Оцените статью
Добавить комментарий