2016-05-23 11 views
0

私は分析のためにデータベースからデータを取得中で、問題が発生しました。基本的に私は売却の進捗状況を示す列を持っています。これらの列の値が「?」「緑」、「赤」かをすることができますが、それぞれが固有の記述、それらを次のように持っているようなGreen - Good to proceedGreen- Ready to move forwardまたはRed -Do not proceedなど列の部分文字列に基づいて列の値を変更するにはどうすればよいですか?

私は必要なデータのみがそれぞれのです "赤 ""緑 "または"? "私はそれに続く記述は必要ありません。私がしているのは、SUBSTRINGを使って各行の最初の文字を取っているので、R, G, R, ?, ? etc..のような値になります。次にExcelで検索と置換を行い、名前を変更します。思う必要はない。私が最初の5文字を​​試してみると、特定の行についてはRed -, or Red-Dなどのデータで終わることになりますが、これは使用できません。

クエリの列の値を変更する方法はありますか?私は、サブストリング値、 に基づいて値を変更しようと

SELECT CASE WHEN SUBSTRING(columnName, 1, 1) = 'G' THEN 'Green' 
     ,CASE WHEN SUBSTRING(columnName, 1, 1) = 'R' THEN 'Red' 
     etc..... 

の線に沿って何かを試してみましたが、これは動作しません。誰かがこれに代わる解決策を提示できますか?

+0

'progress_type(progress_type_id、color、shortcut description)'のようなテーブルを作成し、データテーブルにのみ外部キー 'progress_type_id'を格納します。 –

+0

色に続く注釈に示されている分散から判断すると、「説明」はおそらく元の表に残る必要があります。私は進捗状況 "コード"を移動することに同意します。 – Uueerdo

答えて

0

あなたはこのようなことを試すことができます。値は常にcharacaters ' -'が含まれており、我々はMySQLのSUBSTRING_INDEX機能を使用することができ、前を表示さだけ文字を返したい場合はここでsqlfiddle

select case substring(mystring,1,1) 
     when 'G' then 'Green' 
     when 'R' then 'Red' 
     else '?' 
    end as mycolumn from test; 
+0

ありがとう!これは魅力的なように働いているようです!心から感謝する! – Eoin

0

substringinstrの組み合わせを使用できます。

select substring(columnname,1,instr(columnname,'-')-1) as color 
from tablename 
0

です。たとえば、次の文字' -'が含まれていない文字列MyStringのいずれかの値がある場合、その式はそれの全体がMYSTRING返すこと

SELECT SUBSTRING_INDEX(t.mystring,' -',1) 
    , ... 
    FROM test t 

注意。

多くの可能な表現の1つです。

+0

コメントありがとうございます!残念ながら、すべてのデータがそのようにフォーマットされているわけではありません。 @ cableloadの提案は私にとってはうまくいっているように思われるので、私はその時に一緒に行くつもりだと思う – Eoin

0

もう少し柔軟性が必要な場合に使用して、「グレー」を挿入する人の心配が少なくなります。また

SELECT CASE 
     WHEN columnName LIKE 'Green%' THEN 'Green' 
     WHEN columnName LIKE 'Red%' THEN 'Red' 
     ELSE '?' 
     END AS `status` 
FROM .... 

、が時々インデックスを活用することができますワイルドカードで始まらないLIKE文。 SUBSTRINGのような関数呼び出しは(決して)できることはほとんどありません。

関連する問題