0
文字列をbigintに変換する関数を作成します。変換が不可能な場合、関数はnullを返す必要があります。私は、機能が正常な表現(例えば、「10000」)のために仕事をしたいと仮数・指数表現(「1E1 + 10」)がここで私はこれまでに書かれたものです:ときに私varcharをbigint関数に変換する
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を返すことです。 変換に前提条件を入れてもはや落ちないようにするにはどうすればよいですか?
呼び出し例:select dbo.udf_get_bigint( '3e0210') 出力:式をデータ型realに変換する算術オーバーフローエラー。
も ''(floatとして「3e0210」)キャストを行うことができます – Manatherin