Sql 打印返回数字时得到整数结果

Sql 打印返回数字时得到整数结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,不太明白为什么打印时返回0.57时得到了@res=1?我需要在我的UDF函数中返回数值结果 DECLARE @text1 VARCHAR(255) = 'some text' DECLARE @text2 VARCHAR(255) = 'same another text' DECLARE @res AS NUMERIC DECLARE @i INT = 0 DECLARE @exist_counter INT = 0 WHILE @i < (LEN(@text1) - 2) BEGIN

不太明白为什么打印时返回0.57时得到了
@res=1
?我需要在我的UDF函数中返回数值结果

DECLARE @text1 VARCHAR(255) = 'some text'
DECLARE @text2 VARCHAR(255) = 'same another text'
DECLARE @res AS NUMERIC
DECLARE @i INT = 0
DECLARE @exist_counter INT = 0

WHILE @i < (LEN(@text1) - 2)
BEGIN
    SET @i = @i + 1

    IF CHARINDEX(SUBSTRING(@text1, @i, 3), @text2) > 0
    BEGIN
        SET @exist_counter = @exist_counter + 1
            --print @exist_counter
            --print SUBSTRING(@text1,@i,3)
    END
END

PRINT @i
PRINT @exist_counter
PRINT cast(@exist_counter AS NUMERIC) / cast(nullif(@i, 0) AS NUMERIC)

SET @res = cast(@exist_counter AS NUMERIC) / cast(nullif(@i, 0) AS NUMERIC)

PRINT @res
DECLARE@text1 VARCHAR(255)='some text'
声明@text2 VARCHAR(255)=“与其他文本相同”
将@res声明为数字
声明@i INT=0
声明@exist\u计数器INT=0
而@i<(LEN(@text1)-2)
开始
设置@i=@i+1
如果CHARINDEX(子字符串(@text1,@i,3),@text2)>0
开始
设置@exist\u计数器=@exist\u计数器+1
--打印@exist\u计数器
--打印子字符串(@text1,@i,3)
结束
结束
打印@i
打印@exist\u计数器
打印强制转换(@exist\u counter为数字)/cast(nullif(@i,0)为数字)
设置@res=cast(@exist\u计数器为数字)/cast(nullif(@i,0)为数字)
打印@res
来自post

具有固定精度和比例的数字数据类型

所以你应该改变比例

declare @res as numeric(18, 2)
为什么?

正如@HABO的评论,“默认精度为18.”和“默认刻度为0”,其中刻度为“存储在小数点右侧的小数位数。”

来自post

具有固定精度和比例的数字数据类型

所以你应该改变比例

declare @res as numeric(18, 2)
为什么?


正如@HABO的评论,“默认精度为18.”和“默认刻度为0”,其中刻度是“存储在小数点右侧的小数位数。”

您在这里实际想实现什么?当您使用的是查询语言而不是编程语言时,为什么要使用
?您也不会为
数值
数据类型声明比例/精度;你真的应该这样做,否则你会有意想不到的行为。你到底想在这里实现什么?当您使用的是查询语言而不是编程语言时,为什么要使用
?您也不会为
数值
数据类型声明比例/精度;你真的应该这样做,否则你会得到意想不到的行为。更具体地说,状态是:“默认精度为18.”和“默认刻度为0”,其中刻度是“存储在小数点右侧的小数位数”。OP需要更改刻度,而不是精度,获取结果中的小数位。感谢您的评论。我刚刚更新了我的答案,请看一下@HABOMore,具体来说,它的状态是:“默认精度是18.”和“默认刻度是0”,其中刻度是“存储在小数点右侧的小数位数”。OP需要更改刻度,而不是精度,获取结果中的小数位。感谢您的评论。我刚刚更新了我的答案,请看@HABO