17

我的字段值 productlength 为 0.123。这是从视图中得出的,并且具有 varchar 数据类型。

我需要将其转换为浮点数或数值,以便执行数学比较。

convert(float,productlength) 和 cast(productlength as float) 都不起作用。

error varchar cant be converted to float或类似的东西。

从我读过的内容来看,varchar 根本无法转换为数字字符串?

有什么聪明的方法解决这个问题吗?

4

3 回答 3

28

您可以将 varchars 转换为浮点数,并且可以按照您表达的方式进行。您的 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)
于 2013-07-18T17:53:07.397 回答
9

采用

Try_convert(float,[Value])

https://raresql.com/2013/04/26/sql-server-how-to-convert-varchar-to-float/

于 2017-10-31T10:09:21.767 回答
-1
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 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。

于 2013-07-19T09:21:28.160 回答