我在sql server中有float数据类型列,我需要得到最小小数和最大小数。
Here is SQL Fiddle 我正在使用
Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), value, 128)
) AS FLOAT) AS BIGINT))
哪个工作得很好,但是当价值为负时,例如-0.061
,它会抛出错误Error converting data type varchar to float.
所以对于alter我搜索并发现有函数名PARSENAME(@var,1)
,它也适用于负数,但是这个函数在十进制值之后返回,返回类型是nchar
例如:如果float值为-0.061,则它将返回返回类型nchar
的061所以我不能使用len
函数来获取其长度。
那么如何通过使用小提琴或使用上述功能来实现此功能。
答案 0 :(得分:4)
尝试使用ABS()
功能
SELECT value,
Decimals = CASE Charindex('.', value)
WHEN 0 THEN 0
ELSE
Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), ABS(value), 128)
) AS FLOAT) AS BIGINT))
END
FROM numbers
答案 1 :(得分:1)
我想使用ABS()函数就足够了。不应该吗?
返回绝对(正)值的数学函数 指定的数字表达式。
SELECT value
, Decimals = CASE CHARINDEX('.', value)
WHEN 0 THEN 0
ELSE LEN(CAST(CAST(REVERSE(CONVERT(VARCHAR(50), ABS(value), 128)) AS FLOAT) AS BIGINT))
END
FROM numbers;
答案 2 :(得分:1)
这会奏效。 当它是负数时,只需将简单值替换为-value即 CASE WHEN值< 0 THEN -value ELSE value END
SELECT value,
Decimals = CASE WHEN Charindex('.', value)=0
THEN 0
ELSE Len (Cast(Cast(Reverse(CONVERT(VARCHAR(50), ABS(value), 128) ) AS FLOAT) AS BIGINT))
END
FROM numbers
答案 3 :(得分:0)
要删除 - 符号,请使用ABS功能。 ABS(价值)代替价值