SQL Server清除小数点有效数字后的所有0
  gdTEM5oyuXGK 2023年11月01日 74 0

一、前言

很多企业管理系统,在单据及报表的使用时,都会提供小数点有效数字后0是否显示的功能。在金蝶云星空的BOS平台,这个功能叫"隐藏尾0"。现在假如自己开发一个系统,提供可配置的"隐藏尾0"的功能,该如何实现呢?以下是数据库开发方面的解决方案,仅供参考。

二、方案

方法一、将数据转换为REAL类型

1)代码:

SELECT CAST(1 AS REAL)
SELECT CAST(1.000000 AS REAL)
SELECT CAST(1.010000 AS REAL)

2)结果:

方法二、通过自定义函数实现

1)代码:

CREATE FUNCTION [dbo].[RC_CLEARZERO](@INVALUE VARCHAR(50))
    RETURNS VARCHAR(50)
AS
BEGIN
    DECLARE @RETURNVALUE VARCHAR(20)

    IF (ISNULL(@INVALUE,'')='' OR ISNUMERIC(@INVALUE)=0)    --非数字或无效数字
       SET @RETURNVALUE=''
    ELSE IF (CHARINDEX('.',@INVALUE)=0)    --不含小数点
       SET @RETURNVALUE=@INVALUE
    ELSE IF (SUBSTRING(REVERSE(@INVALUE),PATINDEX('%[^0]%',REVERSE(@INVALUE)),1)='.')    --小数点后全为0
        SET @RETURNVALUE=LEFT(@INVALUE,LEN(@INVALUE)-PATINDEX('%[^0]%',REVERSE(@INVALUE)))
    ELSE
        SET @RETURNVALUE=LEFT(@INVALUE,LEN(@INVALUE)-PATINDEX('%[^0]%.%',REVERSE(@INVALUE))+1)
    
    RETURN @RETURNVALUE
END

2)执行:

SELECT [dbo].[RC_CLEARZERO] ('1')
SELECT [dbo].[RC_CLEARZERO] ('1.000000')
SELECT [dbo].[RC_CLEARZERO] ('1.010000')

3)结果:

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  az2L92p17wYQ   2024年04月12日   85   0   0 SQL Server
  Ol6Fq6uc0Glb   2024年03月24日   191   0   0 SQL Server
  Ol6Fq6uc0Glb   2024年03月24日   78   0   0 SQL Server
gdTEM5oyuXGK