【sql】将 float 转换为数据类型 numeric 时出现算术溢出错误

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010082526/article/details/82784606

sql中float类型的取值范围?

大于9999999999的情况下,就会报错将 float 转换为数据类型 numeric 时出现算术溢出错误

  insert into[dbo].[T_DATA_DISEASE](STATIONCODE,MONIDATE,RATE,STYLE)
  select STATIONCODE,MONIDATE,[dbo].[DiseaseData](PM25,1) RATE,'1' STYLE
    FROM [AirDB_CC].[dbo].[T_MON_AIRSTATIONDAY]
    where MONIDATE<'2018-9-15'

USE [AirDB_CC]
GO

/****** Object:  UserDefinedFunction [dbo].[DiseaseData]    Script Date: 2018-9-20 11:42:02 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


-- =============================================
-- Author:        <pyy>
-- ALTER date: <2018.9.19>
-- Description:    <疾病率值>
-- =============================================

ALTER function [dbo].[DiseaseData](@val decimal(18,8),@style int)
returns decimal(18,8)
as
begin

    declare @rate decimal(18,8)

    set @rate = 0.0


    if (@style = 1 and @val<=44)
        set @rate =Exp(1.09 * (@val - 25)) * 5
    else if (@style = 1 and @val>44)
        set @rate = 9999999999

    else if (@style = 2 and @val<=55)
        set @rate = Exp(0.68 * (@val - 25)) * 11.5
    else if (@style = 2 and @val>55)
        set @rate = 9999999999

    else if (@style = 3 and @val<=28)
        set @rate = Exp(7.9 * (@val - 25)) * 0.39
    else if (@style = 3 and @val>28)
        set @rate = 9999999999

    else if (@style = 4 and @val<=58)
        set @rate = Exp(0.56 * (@val - 25)) * 56.1
    else if (@style = 4 and @val>58)
        set @rate = 9999999999

    else if (@style = 5 and @val<=59)
        set @rate = Exp(0.49 * (@val - 25)) * 371.71
    else if (@style = 5 and @val>59)
        set @rate = 9999999999

    else if (@style = 6 and @val<=57)
        set @rate = Exp(0.56 * (@val - 25)) * 135.74
    else if (@style = 6 and @val>57)
        set @rate = 9999999999

    else if (@style = 7 and @val<=41)
        set @rate = Exp(1.43 * (@val - 25)) * 0.4186
    else if (@style = 7 and @val>41)
        set @rate = 9999999999

    else if (@style = 8 and @val<=69)
        set @rate = Exp(0.53 * (@val - 25)) * 0.64375
    else if (@style = 8 and @val>69)
        set @rate = 9999999999

   if (@rate >= 9999999999)
   set @rate = 9999999999
    return @rate
end

猜你喜欢

转载自blog.csdn.net/u010082526/article/details/82784606
今日推荐