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