2016-05-31 9 views
0

私のカラムの中には末尾に接尾辞_aがあります。
カラムにそのような接尾辞が付いているかどうかを確認したい場合は、それを私の結果セットから削除するだけです。カラム名から接尾辞を削除してください

これが私のクエリです:

SELECT t1.column_name FROM information_schema.Columns t1 
WHERE t1.table_name = 'myTab1' AND t1.table_schema = 'myDatabase1' 

私のようなものを追加する必要があります:col_acolなるよう

IF(SUBSTR(column_name, -2) == "_a", SUBSTR("column_name", 0, -2)) 

を。

私は接尾辞を保持する必要があるので、列名の名前を完全に変更することはできません。

+2

正確に何をしたいですか?私はあなたの質問を理解していません:最初にあなたは言う:もし列がそのような接尾辞を持っていれば、それを削除するだけです。あなたの投稿の最後には:_so私の列名の名前を変更することはできません_ – vaso123

+0

@lolka_bolka:I私の結果セットのサフィックスを削除したいのですが、カラムの名前を変更したくありません。 – user1170330

+1

コード内のサフィックスを削除しますが、データベース側に保持しますか?これを正しく理解している場合、エイリアスが使用されているのとまったく同じです(つまり、 'select t1.column_name_a as column_name')。 – user2366842

答えて

2

\は、特殊文字_をエスケープします。

SELECT case when t1.column_name like '%\_a' then SUBSTRING(t1.column_name, 1, length(t1.column_name)-2) 
      when t1.column_name like '%|a' then SUBSTRING(t1.column_name, 1, length(t1.column_name)-2) 
     else t1.column_name end 
FROM information_schema.Columns t1 
WHERE t1.table_name = 'myTab1' AND t1.table_schema = 'myDatabase1' 

コメントに基づいて、検索対象文字列のパターンが|a使用にt1.column_name like '%|a'

Sample fiddle

+0

ありがとうございます。 '| a'のような別の接尾辞があるのはどうでしょうか?単に '_'で '_'を変更しても機能しませんでした。 – user1170330

+1

この場合、\は必要ありません。 \は特殊文字 '_'をエスケープしたもので、「任意の1文字」 – xQbert

+0

@ user1170330 ..' \\ 'は特殊文字' _'をエスケープすることを意味します。 |特殊文字ではありません。そのような場合に 'like' | a'を使うことができます。 –

-1

が含まれているかどうかを少し少ないダイナミック(しかし、間違いなく、より読みやすい)ソリューションは、このようなものになるだろう:

Select t1.column_name_a as column_name, t1.column_name2_a as t1.column_name2 
from information_schema.Columns t1 
where t1.table_name = 'myTab1' and t1.table_schema = 'myDatabase1' 

真に必要なものが必要な場合は、もう1つ答え。あなたのカラム名が一貫しているとすれば、これは私が個人的に見たものからもっと標準的な方法でしょう。

関連する問題