我从数据库中提取数据进行分析并遇到问题。基本上我有一个列,表示销售的进度计划。这些列的值可以是“绿色”,“红色”或“?”,但每个列都有一个独特的描述,例如Green - Good to proceed
,Green- Ready to move forward
或Red -Do not proceed
等。< / p>
我需要的唯一数据是相应的“红色”“绿色”或“?”价值,我不需要跟随他们的描述。目前我正在做的是使用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 :(得分:0)
您可以使用substring
和instr
的组合。
select substring(columnname,1,instr(columnname,'-')-1) as color
from tablename
答案 1 :(得分:0)
你可以尝试这样的事情。这是sqlfiddle
select case substring(mystring,1,1)
when 'G' then 'Green'
when 'R' then 'Red'
else '?'
end as mycolumn from test;
答案 2 :(得分:0)
如果值始终包含字符' -'
,并且我们只想返回之前出现的字符,那么我们可以使用MySQL SUBSTRING_INDEX
函数。例如:
SELECT SUBSTRING_INDEX(t.mystring,' -',1)
, ...
FROM test t
请注意,如果mystring的任何值不包含字符' -'
,那么表达式将在其中返回mystring。
这只是众多可能表达中的一种。
答案 3 :(得分:0)
可以在需要更多灵活性时使用,并确保您可以减少对插入&#39; Gray&#39;
的人的担忧。SELECT CASE
WHEN columnName LIKE 'Green%' THEN 'Green'
WHEN columnName LIKE 'Red%' THEN 'Red'
ELSE '?'
END AS `status`
FROM ....
此外,不以通配符开头的LIKE
语句有时会利用索引;像SUBSTRING
这样的函数调用几乎从不(如果有的话)。