zoukankan      html  css  js  c++  java
  • sql 自定義百分比轉換小數函數

    --CAST 和 CONVERT 函数 Percentage
    DECLARE @dec decimal(5,3), @var varchar(10),@hun decimal(5,1)
    set @dec=0.025
    set @hun=@dec*100
    set @var=cast(@hun as varchar(20))+'%'
    select @var
    
    ---小數轉化為百分數函數 GetPercentageString
    ---塗聚文 Geovin Du
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetPercentageString]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[GetPercentageString]
    GO
    CREATE   function  GetPercentageString
    (  
    	@dec decimal(10,3)
    )
    returns varchar(20)
    AS
    BEGIN
      DECLARE @var varchar(10),@hun decimal(10,1)
            SET @hun=@dec*100
    	SET @var=cast(@hun as varchar(20))+'%'
    	RETURN @var
    END
    GO
    --測試數據 塗聚文 Geovin Du
    SELECT [dbo].[GetPercentageString] (0.05)
    SELECT [dbo].[GetPercentageString] (0.25)
    SELECT [dbo].[GetPercentageString] (1.25)
    
    --1. 查询字符串中是否包含非数字字符
    SELECT PATINDEX('%[^0-9]%', '1235X461')
    SELECT PATINDEX('%[^0-9]%', '12350461')
    --2. 查询字符串中是否包含数字字符
    SELECT PATINDEX('%[0-9]%', 'SUYLLGoO')
    SELECT PATINDEX('%[0-9]%', 'SUYLLG0O')
    
    
    DECLARE @dec decimal(10,4), @var varchar(10),@hun decimal(10,4),@I INT,@K INT,@S VARCHAR(20)
    SET @var='5.23%'
    --SELECT @K=LEN(@var)
    --SELECT @S=LEFT(@var,@K-1)
    SELECT @S=RIGHT(@var,1)
    --SELECT @S
    SELECT @I=CHARINDEX('%',@S)
    IF @I>0
       BEGIN
    	SET @var=REPLACE(@var,'%','')
    	SET @hun=CAST(@var AS decimal(10,4))
    	SET @dec=@hun/100
    	SELECT @dec
       END
    ELSE
       BEGIN
    	SELECT @dec=NULL --'無效數據'
       END
       
    
    --百分數轉化為小數函數 GetPercentageNumber
    ---塗聚文 Geovin Du
    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[GetPercentageNumber]') and xtype in (N'FN', N'IF', N'TF'))
    drop function [dbo].[GetPercentageNumber]
    GO
    CREATE   function  GetPercentageNumber
    (  
    	@var varchar(10)
    )
    returns decimal(10,4)
    AS
    BEGIN
      DECLARE  @dec decimal(10,4), @hun decimal(10,4),@I INT,@K INT,@S VARCHAR(20)
    	SELECT @S=RIGHT(@var,1)
    	--SELECT @S
    	SELECT @I=CHARINDEX('%',@S)
    IF @I>0
       BEGIN
    	SET @var=REPLACE(@var,'%','')
    	SET @hun=CAST(@var AS decimal(10,4))
    	SET @dec=@hun/100
    	--SELECT @dec
       END
    ELSE
       BEGIN
    	SELECT @dec=NULL --'無效數據'
       END
    RETURN @dec
    END
    GO
    --測試數據 塗聚文 Geovin Du
    SELECT [dbo].[GetPercentageNumber] ('5.23%')
    
    SELECT [dbo].[GetPercentageNumber] ('%0.23')
    

    哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)成功.---Geovin Du(涂聚文)
  • 相关阅读:
    Microsoft.Office.Interop.Excel 组件的报错检索 COM 类工厂中 CLSID,错误码:80070005
    SQLServer编写自己的切分函数 SPLIT和带排序的切割函数 SPLITSort
    Powerdesigner 导出Excel格式数据字典 导出Excel格式文件
    NPOI 导入导出excel两种方式 和 错误 无法访问已关闭的流解决方式
    unable to start the virtual device;Genymotion启动安卓模拟器出错
    datetimepicker 时间控件 1899年问题以及解决方法
    Linux命令大全
    Linux工具包
    Redis
    MySQL索引
  • 原文地址:https://www.cnblogs.com/geovindu/p/2165544.html
Copyright © 2011-2022 走看看