如何根据它的子字符串更改列的值?

时间:2016-05-23 15:53:23

标签: mysql sql substring vertica

我从数据库中提取数据进行分析并遇到问题。基本上我有一个列,表示销售的进度计划。这些列的值可以是“绿色”,“红色”或“?”,但每个列都有一个独特的描述,例如Green - Good to proceedGreen- Ready to move forwardRed -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.....

我尝试根据子字符串值更改值, 但这不起作用。任何人都可以为此提供替代解决方案吗?

4 个答案:

答案 0 :(得分:0)

您可以使用substringinstr的组合。

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这样的函数调用几乎从不(如果有的话)。