2010-12-08 2 views
1

私は、アドレスを正規化する関数を持っています。私が今やりたいのは、文字列の最後にある限定された指定されたリスト内の文字列を削除することです。削除したい文字列が 'st'、 'ave'、 'rd'、 'dr'、 'ct' ...これらの文字列のいずれかで終わる場合、それらを削除したいとします。これを達成する最良の方法は、T-SQLを使用することです(これはではなく、はselectステートメントの一部です)。文字列の最後で部分文字列を削除する最も簡単な方法は何ですか?

編集:

これは、1つのアドレスとフォーマット、それを受け入れる機能です。私はコードとリストをインライン化したいと思いますが、可能な限りシンプルな方法で行います。たとえば、私が演奏しているコードは次のとおりです。

if @address LIKE '%st' 
SET @address = substring(@address, 1, PatIndex('%st', @address) - 1) 

これは良い方法ですか?どのように私は別の値(st以外)でこのコードを繰り返すことができるように何らかのループでそれを置くことができますか?値を追加する

答えて

1

が新しいテーブルにトリミングすることは簡単に住所が

SQLステートメント

をクリーンアップする
  • 使用この表を新しい値を追加

    • にあなたを可能に
      DECLARE @Input VARCHAR(32) 
      SET @Input = 'Streetsstaverddrad' 
      
      DECLARE @Trim TABLE (Value VARCHAR(32)) 
      
      INSERT INTO @Trim 
      SELECT 'st' 
      UNION ALL SELECT 'ave' 
      UNION ALL SELECT 'rd' 
      UNION ALL SELECT 'dr' 
      UNION ALL SELECT 'ad' 
      
      WHILE EXISTS (
          SELECT * 
          FROM (
            SELECT [Adres] = @Input 
            ) i 
            INNER JOIN @Trim t ON i.Adres LIKE '%' + t.Value 
      ) 
      BEGIN 
          SELECT @Input = SUBSTRING(Adres, 1, LEN(Adres) - LEN(t.Value)) 
          FROM (
            SELECT [Adres] = @Input 
           ) i 
            INNER JOIN @Trim t ON i.Adres LIKE '%' + t.Value 
      END   
      
      SELECT @Input 
      
  • +0

    ものになるだろう...何の「アドレス」の表は、 – froadie

    +0

    @froadieはありませんが、I関数で使用される概念を変更しました。 'Streetst'文字列は入力変数に置き換えられます。この解決策は* 1つの*エンディングだけを削除することを覚えておいてください。 –

    +0

    私はこのコードを使用しようとすると、「近くにキーワード 'の近くに構文がありません」というメッセージが表示されます。また、 "with q ..."コードを使って何をしようとしているのか説明できますか?私は実際にこのような構文を見ていないし、それが何をしているのか理解していない... – froadie

    0

    SQL Server 2005では、 leを使用してregular expression matchingを有効にするユーザー関数を定義します。末尾の文字列を取り除く関数を定義する必要があります。あなたが言及したシナリオに一致するように正規表現これは一度に一つのアドレスを受け入れ、それを正規化機能であるような...

    \s+(ave|rd|dr|ct)\s*$ 
    
    関連する問題