2011-12-02 13 views
52

T-SQLを使用して、最後の3つの文字をvarcharカラムに追加するにはどうすればよいですか?T-SQLサブストリング - 最後の3文字

ので、列のテキストは、IDS_ENUM_Change_262147_190であり、私はあなたが必要とするすべてです190

答えて

87
SELECT RIGHT(column, 3) 

を必要としています。

同じようにLEFT()を実行することもできます。

RIGHT()がインデックスを使用できないことをWHERE句で使用している場合は、注意してください。

+7

大量のデータをこのように検索する場合は、インデックスの使用を回復する方法があります。逆順の文字列である計算列を作成します。次に、右(最下位)の3文字が左(最上位)の3文字になりました。その後、その列を索引付けし、 'LEFT(反転、3)=逆転( '190')を探します。 (私は退屈だ、教えてくれない?) – MatBailie

+0

ありがとう! – Jared

13

あなたがいずれかの方法を使用することができます:それについて考えるために多くの方法が常に優れているので

SELECT RIGHT(RTRIM(columnName), 3) 

OR

SELECT SUBSTRING(columnName, LEN(columnName)-2, 3) 
+0

他の方法よりも有利な方法がありますか?そして、RTRIMは必要ですか(私に余分なようです)? – noelicus

+0

仕事はいくつかのやり方で行うことができ、ここでは共通の2つの方法を使って示しました。第1のケースは第2の方法より速い。 RTRIMは必須ではありません。右側の余分なスペースを省略するために使用されます。ありがとう –

5

を:

select reverse(substring(reverse(columnName), 1, 3)) 
+1

いいえ、それ以上に良いとは限りません。 –

+1

あなたはそうです。あなたは何をしようとしている仕事を達成するために必要なすべてのツールを常に持っています。知識は力と同等ではない、と私は推測する。 –

+0

私はそれが何を意味するのかは分かりません。あなたが提案するソリューションは不必要に複雑であり、正しい解決策ではないという状況はありません。したがって、それは悪いです。 –

1
declare @newdata varchar(30) 
set @newdata='IDS_ENUM_Change_262147_190' 
select REVERSE(substring(reverse(@newdata),0,charindex('_',reverse(@newdata)))) 

を===説明===

私はこのように書か読むためにそれが簡単に見つかりましたspecifの文字が最初に出現する(すなわち、テキスト

  • ルックをリバース

    SELECT 
        REVERSE(--4. 
         SUBSTRING(-- 3. 
          REVERSE(<field_name>), 
          0, 
          CHARINDEX(-- 2. 
           '<your char of choice>', 
           REVERSE(<field_name>) -- 1. 
          ) 
         ) 
        ) 
    FROM 
        <table_name> 
    
    1. テキストのFROM ENDの最初の出現)。この文字のインデックスを取得します
    2. 逆のテキストをもう一度見ます。インデックス0からあなたのcharのインデックスを検索します。これは、あなたが探している文字列を与えますが、逆
    3. にあなたのご希望のサブ
  • +1

    あなたのコードに沿った説明は役に立ちます – krsteeve

    +0

    Stackoverflow.comコメントは簡単なマークアップ(マークダウン形式)でフォーマットを受け入れることができます。利用可能なヘルプがあります。コードのセグメントを表示するには、各行の先頭に4つのスペースを付けることができます。 – FooF

    -3

    を与えるために反転した文字列を逆あなたが特に所望の文字で終わる文字列を検索する場合、これはあなたを助けるでしょう。..

    select * from tablename where col_name like '%190' 
    
    +1

    これは質問に答えません。 OPは、190のような特定の文字列ではなく、最後の3文字を取得する方法を知りたいと考えています。 – BradleyDotNET

    関連する問題