0

@dmarkezは昨日質問をしました、そして私がボタンをクリックする直前にPost Your Answer、彼は質問を削除しました。答えは共有する価値があると思います...彼は質問を再投稿しなかったので、私が同じようなことを試みている他の人と答えを共有できるように、私がそれを再投稿してもかまわないことを願っています。

元のタイトル

文字列を操作するMSSQL関数

元の質問

プレフィックス付きの名前を判別し、これを実際の名前と組み合わせる必要があるMSSQL関数が必要です。

これを達成するための最良の方法または機能は何ですか?

プレフィックス名:Te、De、Van、Dela、O、Mc、San、Losなど…</ p>

サンプルの入力/出力名:

van dam te mora te-> vandam temora te

o mara dela cruz -> omara delacruz

mc arthur white o san miguel -> mcarthur white osanmiguel

moana te aro van dolf-> moana tearo vandolf
4

1 に答える 1

0

すべての検索と置換の値を1つのテーブルに配置すると、SQLを数行記述して、S&R値を循環して名前を修正できます。prefixテーブルにS&Rペアを追加するのは簡単なので、S&Rルーチンは動的です。

declare @prefix table (srch varchar(255), rplc varchar(255))
declare @names table (name varchar(255))

insert into @prefix
values ('te ', 'te'), ('de ', 'de'), ('van ', 'van'), ('dela ', 'dela'), ('san ', 'san'), ('o ', 'o'), ('mc ', 'mc'), ('los ', 'los')

insert into @names
values ('van dam te mora te'), ('o mara dela cruz'), ('mc arthur white o san miguel'), ('moana te aro van dolf')

while (1=1)
begin
  update n
  set    n.name = replace(n.name, p.srch, p.rplc)
  from   @names n,
         @prefix p
  where  (n.name like p.srch + '%') or (n.name like '% ' + p.srch + '%')

  if @@rowcount = 0
    break
end

select * from @names

プレフィックステーブルの('san ', 'san')前に来ることに注意してください。('o ', 'o')これは、のsan前に交換する必要があるためです。そうでない場合はoosanmiguelが残りosan miguelます。したがって、S&Rの順序は重要です。S&Rループが最初にサブプレフィックスを処理するように、S&Rレコードを正しく順序付けるプレフィックステーブルにクラスター化されたインデックスを追加する必要があります。

于 2012-09-11T12:27:13.910 に答える