2017-04-05 18 views
1

私は削除したいと思う先頭と末尾の両方の文字を持つテーブルにフィールドを持っています。MSSQLでLTRIMとRTIMとREPLACE関数を組み合わせる

テーブル(部分的に示す結果)この結果を生成dbo.inventory

からカテゴリ としてこの声明

SELECTフルネーム:

  • 部品 - ベルト:Z .360J8
  • 部品 - ベルト:Z.360J14
  • 部品 - ベルト:Z.36355-123
  • 部品 - プラスチック&フレーム:Z.103196-001
  • 部品 - 電気ケーブル/コード:Z.P037153674

私が削除したいです「部品を - 」を削除しますダッシュの前に、すべてがコロンを末尾に「:」ので、私は唯一のカテゴリに出て、このようなテーブルを取得することができます。

  • ベルト
  • ベルト
  • ベルト
  • プラスチック&フレーム
  • 電気ケーブル/コード

私はこれを試してみましたが、成功した前の削除した「部品を - 」が、成功したコロンの後のすべてを削除すると声明を組み合わせました「:」

SELECT LTRIM(RTRIM(REPLACE(フルネーム、 '部品 - '、 '')))dbo.inventory 012からカテゴリ AS

  • ベルト::Z.360J8
  • ベルト:Z.360J14
  • ベルト:Z.36355-123
  • プラスチック&フレーム:Z.103196-001
  • は、この結果を生成します
  • 電気ケーブル/コード:あなたのためのZ.P037153674

おかげで、彼lp!

答えて

2

LEFT & CHARINDEXを使用する方法:

SELECT REPLACE(LEFT(FullName, CHARINDEX(':', FullName) - 1), 'Parts - ', '') 

CHARINDEXは、完全な文字列でのコロン文字のインデックス番号は、-1あまりにもそれを削除するために含まれている見つけました。 LEFTを押すと、文字列がその位置に切り捨てられます。 REPLACEは元の例のように 'Parts - '部分を削除します(ハイフンの後にスペースを入れました)。

LTRIMとRTRIMはそれぞれ先頭と末尾のスペースのみを削除するので、ここでは役に立ちません。

何のコロンを含まない行を処理するコード(空白文字列を返します):

SELECT REPLACE(REPLACE(LEFT(Fullname, CHARINDEX(':', Fullname)), 'Parts - ', ''), ':', '') 
+0

文は、このエラーが発生し、ご返信いただきありがとうございます:LEFTまたはSUBSTRING関数に渡さ 無効な長さのパラメータを。 "-1"を削除すると、ステートメントはエラーなく実行されますが、コロンは含まれます。 - ベルト:: - ベルト: - プラスチック・フレーム:ベルト - カテゴリー AS - :( ''、フルネーム))、 '部' '' LEFT(フルネーム、CHARINDEXを() SELECTは、REPLACE - 電気ケーブル/コード: –

+0

コロンが付いていない行があれば、そのエラーが表示されます(事実上位置= -1)。 -1を削除すると、エラーを回避できますが、コロンのない行には空文字列が返される可能性があります。これらの行を見つけてサンプルを投稿すれば、それをどのように処理したいのか、それに応じてコードを適合させることができます。 SELECT REPLACE(REPLACE(置換)(フルネーム、CHARINDEX( ':'、フルネーム))、 'パーツ - '、 '')、 ':'、 '') –

+0

私はエラーではない回避策として動作する可能性があります。結果を達成するために2つの置き換えステートメントを組み合わせ、あなたは私にソリューションに感謝しましたありがとう。 REPLACE(置換(LEFT(FullName、CHARINDEX( ':'、FullName))、 'Parts - '、 '')、 ':'、 '') –

関連する問題