sql - Got integer result when printed return numeric
问题描述
Not quite understood why I got @res = 1
when print return 0.57
? I need to return the numeric results in my UDF function.
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 @res as numeric(18, 2)
为什么?
正如@HABO 的评论,“默认精度为18。 ”和“默认比例为 0 ”,其中比例为“存储在小数点右侧的小数位数。 ”
推荐阅读
- symfony - 如何在不同的域上显示探查器
- google-analytics - 如何使用数据层通过 gaEvent 发送自定义维度
- regex - 使用 perl 单行重命名匹配文件时出错
- certificate - 将证书与受 IdentityServer4 保护的 API 一起使用
- unity3d - UnityWebRequest 永远不会返回附加到预制件的脚本
- django - 错误 ==> 无法导入名称“RemovedInDjango110Warning”
- akka - Akka Rest 服务器 Jackson ObjectReader 和 ObjectWriter 初始化
- python - 将 Pandas 列中的字典拆分为单独的列
- python - Pytz - 从一个时区转换到另一个时区时时间关闭(11 分钟)
- jquery - 突出显示两个给定数据之间的值