The following function provides a simple solution to string-to-integer conversion.
It converts strings of data type nvarchar(4000) to numbers of data type integer.
By utilizing pattern-matching numeric characters are parsed from the input string from left to right until the pattern is matched. For instance: string "338/I" is converted to number 338. Before actual conversion, the part of the string to be converted is tested for compatibility using the isnumeric() system function.
NB (October 25th 2007):
Razvan Socol has spotted a flaw in the original function, so thanks to him here is a safer version:
create function dbo.fnGet_asInteger
(
@String nvarchar(4000)
,@Pattern nvarchar(4000) = null
)
returns int
as
begin
declare @Result int
declare @intermediateResult nvarchar(4000)
if (@Pattern is null)
begin
set @Pattern = '%[^0-9]%'
end
set @intermediateResult
= case
when @String like @Pattern
then substring(@String, 1, patindex(@Pattern, @String) - 1)
else @String
end
if (isnumeric(@intermediateResult) = 1)
begin
set @Result = cast(@intermediateResult as int)
end
else
begin
set @Result = null
end
return @Result
end
go
However, if you're looking for a much more resilient solution you might find this article very useful:
In fact, the ASPFAQ site is practically overflowing with good advice on ASP, SQL Server, and much more. So, go ahead and learn!
ML
3 comments:
Not exactly what I would call "fail-safe"... Try:
SELECT dbo.fnGet_asInteger('11.3',default)
SELECT dbo.fnGet_asInteger('11d2',default)
Razvan,
Thank you for spotting that!
ML
Good work maaaaaan.
http://webdeveloperscorner.blogspot.com/
Post a Comment