N番目の文字の前に部分文字列を返すSQL Server関数を作成しました。文字列内のN番目の文字の検索を最適化する
たとえば、 SELECT dbo.fn_getFirstNthSentence('.', 'hello world.It.is.raining.today', 3)
は「hello world.It.Is。」を返します。結果として。
私が書いた機能は汚いとゆっくりと見えるので、私はそれを最適化したいと思います。 清潔にするためのアドバイスをいただければ幸いです。
ありがとうございます。
CREATE FUNCTION fn_getFirstNthSentence
(
@TargetStr VARCHAR(MAX) ,
@SearchedStr VARCHAR(8000) ,
@Occurrence INT
)
RETURNS varchar(MAX)
AS
BEGIN
DECLARE @pos INT ,
@counter INT ,
@ret INT;
SET @pos = CHARINDEX(@TargetStr, @SearchedStr);
IF (@pos = 0)
RETURN @SearchedStr
SET @counter = 1;
IF @Occurrence = 1
SET @ret = @pos;
ELSE
BEGIN
WHILE (@counter < @Occurrence)
BEGIN
IF(LEN(@SearchedStr) < @pos + 1)
RETURN @SearchedStr
SELECT @ret = CHARINDEX(@TargetStr, @SearchedStr,
@pos + 1);
IF(@ret = 0)
RETURN @SearchedStr
SET @counter = @counter + 1;
SET @pos = @ret;
END;
END;
RETURN LEFT(@SearchedStr, @ret)
END;
あなたのコードがエラーなしで実行された場合、その後、あなたに賞賛していますが、[コードレビュー](http://codereview.stackexchange.com/)に投稿することができます。 –
SQL Serverは本当にデータを扱うのには優れていますが、文字列の操作には不向きです。あなたはt-sqlを使ってこれをもっと速くすることができますが、CLRよりもSQLの方が速いとは思いません。 –
誰かが正規表現を持っている可能性があります – Cato