Sql получить первые 2 группы числа - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть номер, отформатированный следующим образом: 123.456.789.1.2.3

Мне нужна функция, которая извлекает первые 2 группы числа и помещает их в 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 ]

2 голосов
/ 13 декабря 2011

Это должно работать:

cast(REPLACE(LEFT(@str,CHARINDEX('.', @str,CHARINDEX('.', @str)+1)),'.','') as bigint)
0 голосов
/ 13 декабря 2011

Ваш метод выглядит хорошо. Если вы хотите что-то более элегантное или более простое, я думаю, вам придется написать функцию CLR. Затем вы можете воспользоваться всем, что может предложить .NET API для анализа строк. В качестве альтернативы, вы можете попытаться выполнить этот анализ на прикладном уровне. Конечно, это может быть неосуществимо.

Вы можете прочитать о регулярных выражениях и функциях CLR здесь: http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

Кроме того, я бы предложил изменить вашу пользовательскую функцию SQL, чтобы на самом деле входная строка имела два периода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...