Вопрос:
У меня есть значение значения поля, равное 0.123. Это из представления и имеет тип данных varchar.
Мне нужно преобразовать его в float или числовое значение, чтобы выполнить математические сравнения.
новообращенный (поплавок, productlength)
а также
cast (productlength as float) оба не работают.
error varchar cant be converted to float или что-то вроде этого.
Из того, что я прочитал, varchar просто не может быть преобразован в числовую строку?
Какие-нибудь умные способы обойти это?
Лучший ответ:
Вы можете конвертировать varchars в float, и вы можете сделать это так, как вы выразились. Ваш varchar не должен быть числовым значением. В нем должно быть что-то еще. Вы можете использовать IsNumeric для его проверки. Смотрите это:
declare @thing varchar(100) select @thing = ‘122.332’ —This returns 1 since it is numeric. select isnumeric(@thing) —This converts just fine. select convert(float,@thing) select @thing = ‘122.332.’ —This returns 0 since it is not numeric. select isnumeric(@thing) —This convert throws. select convert(float,@thing) Ответ №1
Используйте
Try_convert(float,[Value])
См
https://raresql.com/2013/04/26/sql-server-how-to-convert-varchar-to-float/
Ответ №2DECLARE @INPUT VARCHAR(5) = ‘0.12’,@INPUT_1 VARCHAR(5)=’0.12x’; select CONVERT(float, @INPUT) YOUR_QUERY , case when isnumeric(@INPUT_1)=1 THEN CONVERT(float, @INPUT_1) ELSE 0 END AS YOUR_QUERY_ANSWERED
выше вернет значения
однако ниже запрос не работает
DECLARE @INPUT VARCHAR(5) = ‘0.12’,@INPUT_1 VARCHAR(5)=’0.12x’; select CONVERT(float, @INPUT) YOUR_QUERY , case when isnumeric(@INPUT_1)=1 THEN CONVERT(float, @INPUT_1) ELSE **@INPUT_1** END AS YOUR_QUERY_ANSWERED
как @INPUT_1 на самом деле имеет varchar.
Итак, ваш выходной столбец должен содержать varchar.