Sql获得前2组的数字

时间:2011-12-13 15:19:07

标签: sql sql-server sql-server-2008 tsql

我有一个以下列方式格式化的数字: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

有没有人知道不同的方法呢?也许更优雅或更短?

2 个答案:

答案 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以确保输入字符串实际上有两个句点。