Tsql 将varchar转换为bigint函数

Tsql 将varchar转换为bigint函数,tsql,Tsql,我想创建一个将字符串转换为bigint的函数。如果无法进行转换,则函数应返回null。我希望该函数适用于正常表示法(例如“10000”)和尾数指数表示法(“1e1+10”)。到目前为止,我已经编写了以下内容: ALTER FUNCTION [dbo].[udf_get_bigint] ( @character varchar(100) ) RETURNS bigint AS BEGIN if ISNUMERIC(@character)=0 retur

我想创建一个将字符串转换为bigint的函数。如果无法进行转换,则函数应返回null。我希望该函数适用于正常表示法(例如“10000”)和尾数指数表示法(“1e1+10”)。到目前为止,我已经编写了以下内容:

ALTER FUNCTION [dbo].[udf_get_bigint]    
(  
 @character varchar(100)  
)  
RETURNS bigint  

AS  
BEGIN  

    if ISNUMERIC(@character)=0 return null
    if LEN(ltrim(rtrim(@character)))>25 return null
    declare @nr numeric(25,4)
    if charindex('e',lower(@character))>0   
    begin
        declare @real real

        **set @nr=CONVERT(real,@character)**
        if  @nr not between convert(numeric(25),-9223372036854775808) and 
               convert(numeric(25),9223372036854775807) 
                return null
        set @real = convert(real, @nr)
        return convert(bigint,convert(numeric(25),@real))

    end
    else
        set @nr=CONVERT(numeric(25,4),@character)
        if  @nr between convert(numeric(25),-9223372036854775808) and 
          convert(numeric(25),9223372036854775807) return convert(bigint,@nr)
                 return null
END  
现在,当我需要处理尾数指数表示的溢出时,唯一的问题出现了。如果溢出,粗体转换将下降;但我想让它做的是返回null。 我怎样才能对转换设置一些先决条件,使其不再下降

调用示例:选择dbo.udf\u get\u bigint('3e0210')
输出:将表达式转换为数据类型real时出现算术溢出错误。

使用浮点而不是real。它可能与变量名相矛盾,但它使脚本的这一部分正常工作

declare @real float
此代码将验证

select CONVERT(float,'3e0210')

使用float而不是real。它可能与变量名相矛盾,但它使脚本的这一部分正常工作

declare @real float
此代码将验证

select CONVERT(float,'3e0210')
还可以执行
cast('3e0210'作为浮点)
也可以执行
cast('3e0210'作为浮点)