我有一个以下列方式格式化的数字:123.456.789.1.2.3
我想要一个函数来检索数字的前两组并将它们放在bigint中:结果:123456
到目前为止我做了什么:
CREATE FUNCTION bl.fn_get_2_groups
(
@str nvarchar(255)
)
RETURNS bigint
AS BEGIN
DECLARE @newStr nvarchar(255)
select @newStr = SUBSTRING(@str,1,charindex('.',@str)-1), @str = SUBSTRING(@str,charindex('.',@str)+1,LEN(@str))
select @newStr += SUBSTRING(@str,1,charindex('.',@str)-1)
return convert(bigint,@newStr)
END GO
有没有人知道不同的方法呢?也许更优雅或更短?
答案 0 :(得分:2)
这应该有效:
cast(REPLACE(LEFT(@str,CHARINDEX('.', @str,CHARINDEX('.', @str)+1)),'.','') as bigint)
答案 1 :(得分:0)
您的方法看起来不错。如果你想要更优雅或更容易的东西,我想你将不得不写一个CLR功能。然后,您可以利用.NET API为字符串解析提供的所有功能。或者,您可以尝试在应用程序层中执行此解析。当然,这可能不太可行。
您可以在此处阅读有关正则表达式和CLR函数的信息: http://msdn.microsoft.com/en-us/magazine/cc163473.aspx
另外,我建议修改SQL UDF以确保输入字符串实际上有两个句点。