十进制数的长度

时间:2016-05-19 12:50:38

标签: sql

select length('10.2') from dual;

我想知道数字10.2的长度是3,但在上面的查询中它显示为4.

什么是正确的查询?

2 个答案:

答案 0 :(得分:0)

你有一个根本的误解。 length()是一个操作字符串的函数。参数是一个字符串,它有四个字符'1','0','。'和'2'。因此,返回值为“4”。

您的查询中没有数字。并且“数字的长度”没有意义,因为长度仅定义为字符串(以及各种大型二进制对象,具体取决于数据库)。

我不确定你要找的是什么“3”,所以我不能为此提出建议。

答案 1 :(得分:0)

你不能直接这样做。您必须先将字符串转换为纯数字值(甚至删除小数点)。您可以在T-SQL中尝试以下代码段:

CREATE FUNCTION dbo.fn_GetNumeric
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
    DECLARE @intAlpha INT
    SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
    BEGIN
        WHILE @intAlpha > 0
        BEGIN
            SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
            SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
        END
    END
    RETURN ISNULL(@strAlphaNumeric,0)
END
;

准备好功能后,您可以使用以下查询:

SELECT len(fn_GetNumeric('10.2'))