SQLサーバーに分割関数が必要です。このスレッドに出くわしました:列「dbo」またはユーザー定義関数または集約「dbo.Splitfn」のいずれかが見つからないか、名前があいまいです
インデックスなどを使用して計算が多すぎると感じます。この関数を作成しました。
ALTER FUNCTION [dbo].[Split]
(
@Data varchar(8000),
@Delimter char(1) = ','
)
RETURNS @RetVal TABLE
(
Data varchar(8000)
)
AS
Begin
Set @Data = RTrim(Ltrim(IsNull(@Data,'')))
Set @Delimter = IsNull(@Delimter,',')
If Substring(@Data,Len(@Data),1) <> @Delimter
Begin
Set @Data = @Data + @Delimter
End
Declare @Len int = Len(@Data)
Declare @index int = 1
Declare @Char char(1) = ''
Declare @part varchar(8000) = ''
While @index <= @Len
Begin
Set @Char = Substring(@Data,@index,1)
If @Char = @Delimter And @part <> ''
Begin
Insert into @RetVal Values (@part)
Set @part = ''
End
Else
Begin
Set @part = @part + @Char
End
Set @index = @index + 1
End
RETURN;
End
誰がどれが効率的かコメントできますか?廃棄アプリケーションの1つでデータを分割するためにこの関数を使いすぎますが、これを効率的にしたいと思います。また、その効率をどのように測定したかについても言及してください。