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