2016-05-23 2 views
0

Я извлекаю данные из базы данных для анализа и столкнулся с проблемой. По существу у меня есть столбец, который обозначает план выполнения продажи. Значения этих столбцов могут быть «Зеленый», «красный» или «?», Но каждый из них имеет уникальное описание следующего их, такие как Green - Good to proceed, Green- 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

Вы можете попробовать что-то вроде этого. Вот sqlfiddle

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

Спасибо! Кажется, это сработало как шарм! Действительно ценю это! – Eoin

0

Вы можете использовать сочетание substring и instr.

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

Если значения всегда содержат characaters ' -', и мы хотим вернуть только те символы, которые появляются перед, что мы могли бы использовать MySQL SUBSTRING_INDEX функцию. Например:

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

Обратите внимание, что если есть какое-либо значение MyString, которые не содержат символы ' -', то выражение вернет MyString в полном комплекте.

Это всего лишь одно из многих возможных выражений.

+0

Спасибо за ваш комментарий! К сожалению, не все данные отформатированы так. Похоже, что предложение на канатной дороге для меня работало, поэтому я думаю, что я поеду с этим на данный момент – Eoin

0

Как можно использовать, когда требуется немного больше гибкости, и вы сможете меньше беспокоиться о том, что кто-то вставляет «Серый».

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

Кроме того, LIKE заявления, которые не начинаются с групповыми символами могут иногда используют преимущества индексов; функциональные вызовы вроде SUBSTRING почти никогда (если когда-либо) могут.

Смежные вопросы