如何根据它的子字符串更改列的值?
How to change the value of a column based on a substring of it?
我正在从数据库中提取数据进行分析,但遇到了问题。本质上,我有一列表示销售的进度计划。这些列的值可以是 "Green"、"Red" 或“?”,但它们后面都有一个唯一的描述,例如 Green - Good to proceed
、Green- Ready to move forward
或 Red -Do not proceed
等
我唯一需要的数据是相应的 "Red" "Green" 或“?”价值,我不需要他们后面的描述。目前我所做的就是使用 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.....
我尝试根据子字符串值更改值,
但这不起作用。谁能为此提供替代解决方案?
您可以组合使用 substring
和 instr
。
select substring(columnname,1,instr(columnname,'-')-1) as color
from tablename
你可以尝试这样的事情。这里是 sqlfiddle
select case substring(mystring,1,1)
when 'G' then 'Green'
when 'R' then 'Red'
else '?'
end as mycolumn from test;
如果值总是包含字符 ' -'
,而我们想要 return 只是 在 之前出现的字符,我们可以使用 MySQL SUBSTRING_INDEX
函数。例如:
SELECT SUBSTRING_INDEX(t.mystring,' -',1)
, ...
FROM test t
请注意,如果 mystring 的任何值不包含字符 ' -'
,则表达式将完整地 return mystring。
这只是众多可能的表达方式之一。
喜欢可以在需要更多灵活性时使用,并确保您不必担心有人插入 'Grey'。
SELECT CASE
WHEN columnName LIKE 'Green%' THEN 'Green'
WHEN columnName LIKE 'Red%' THEN 'Red'
ELSE '?'
END AS `status`
FROM ....
此外,LIKE
不以通配符 开头的语句 有时可以利用索引;像 SUBSTRING
这样的函数调用几乎永远不会(如果有的话)。
我正在从数据库中提取数据进行分析,但遇到了问题。本质上,我有一列表示销售的进度计划。这些列的值可以是 "Green"、"Red" 或“?”,但它们后面都有一个唯一的描述,例如 Green - Good to proceed
、Green- Ready to move forward
或 Red -Do not proceed
等
我唯一需要的数据是相应的 "Red" "Green" 或“?”价值,我不需要他们后面的描述。目前我所做的就是使用 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.....
我尝试根据子字符串值更改值, 但这不起作用。谁能为此提供替代解决方案?
您可以组合使用 substring
和 instr
。
select substring(columnname,1,instr(columnname,'-')-1) as color
from tablename
你可以尝试这样的事情。这里是 sqlfiddle
select case substring(mystring,1,1)
when 'G' then 'Green'
when 'R' then 'Red'
else '?'
end as mycolumn from test;
如果值总是包含字符 ' -'
,而我们想要 return 只是 在 之前出现的字符,我们可以使用 MySQL SUBSTRING_INDEX
函数。例如:
SELECT SUBSTRING_INDEX(t.mystring,' -',1)
, ...
FROM test t
请注意,如果 mystring 的任何值不包含字符 ' -'
,则表达式将完整地 return mystring。
这只是众多可能的表达方式之一。
喜欢可以在需要更多灵活性时使用,并确保您不必担心有人插入 'Grey'。
SELECT CASE
WHEN columnName LIKE 'Green%' THEN 'Green'
WHEN columnName LIKE 'Red%' THEN 'Red'
ELSE '?'
END AS `status`
FROM ....
此外,LIKE
不以通配符 开头的语句 有时可以利用索引;像 SUBSTRING
这样的函数调用几乎永远不会(如果有的话)。