为列中的值获取长度为 1 或 2 的子字符串,并在输出中放入单列?
Get substring of length 1 or 2 for values in a column and put in single column in output?
我有一列包含字母数字代码 (elcode)。我正在尝试在我的 select 输出中创建一个新列,其中包含一个基于代码字段的前一个或两个字符的值,使用 SUBSTR()
和 CASE WHEN
(TAXA_GROUP),但我不知道如何做到这一点,以便所有 CASE WHEN
结果都在一个列中。
示例:
三个示例代码:AM1234、AR1357、PD9876。对于前两个,我需要看前两个字符。第一个将在我的输出中转换为 'mammal',第二个将转换为 'reptile.' 对于最后一个,我只需要查看第一个字符,它将在我的输出中转换为 'plant'输出。在整个数据集中,我需要评估5个双字符子串和4个单字符子串。
我可以生成包含两个单独列的内容,一个包含评估那些双字符子字符串产生的值,另一个包含一个字符子字符串产生的值,但我真的希望它们全部进入相同的最后一列。这是我目前正在做的事情:
SELECT EG.elcode
, CASE SUBSTR(EG.elcode, 1, 2) WHEN 'AM' THEN 'mammal'
WHEN 'AR' THEN 'reptile' END AS TAXA_GROUP
, CASE SUBSTR(EG.elcode, 1, 1) WHEN 'P' THEN 'plant' END AS TAXA_GROUP
以上生成的输出包含两个 TAXA_GROUP 列,一列填充了哺乳动物、爬行动物和 null,另一列填充了植物和 null:
elcode
TAXA_GROUP
TAXA_GROUP
AM1234
mammal
null
AR1357
reptile
null
PD9876
null
plant
我希望有一个 TAXA_GROUP 列将这两个 SUBSTR()
命令的结果放在一起。
elcode
TAXA_GROUP
AM1234
mammal
AR1357
reptile
PD9876
plant
我尝试连接两列,但出现错误:
SELECT EG.elcode
, CASE SUBSTR(EG.elcode, 1, 2) WHEN 'AM' THEN 'mammal'
WHEN 'AR' THEN 'reptile' END AS TAXA_GROUP1
, CASE SUBSTR(EG.elcode, 1, 1) WHEN 'P' THEN 'plant' END AS TAXA_GROUP2
, TAXA_GROUP1 || TAXA_GROUP2 AS TAXA_GROUP
Error: An error occurred while running query. ORA-00904: "TAXA_GROUP2": invalid identifier
我在这个网站上搜索时,发现了类似的问题,但大多数与当您不知道字符串的长度(需要正则表达式)时使用 SUBSTR()
相关,而这里不是这种情况。
第 1 - 5 行中的示例数据;完成这项工作的代码从第 6 行开始。
SQL> with test (elcode) as
2 (select 'AM1234' from dual union all
3 select 'AR1357' from dual union all
4 select 'PD9876' from dual
5 )
6 select elcode,
7 case when substr(elcode, 2, 1) = 'M' then 'mammal'
8 when substr(elcode, 2, 1) = 'R' then 'reptile'
9 when substr(elcode, 1, 1) = 'P' then 'plant'
10 end taxa_group
11 from test;
ELCODE TAXA_GROUP
------ ----------
AM1234 mammal
AR1357 reptile
PD9876 plant
SQL>
我会使用 LIKE
。更简单:
select elcode,
(case when elcode like 'AM%' then 'mammal'
when elcode like 'AR%' then 'reptile'
when elcode like 'P%' then 'plant'
end) taxa_group
from t;
但重点是您需要单独的 case
条件,而不是只比较一个值。
我有一列包含字母数字代码 (elcode)。我正在尝试在我的 select 输出中创建一个新列,其中包含一个基于代码字段的前一个或两个字符的值,使用 SUBSTR()
和 CASE WHEN
(TAXA_GROUP),但我不知道如何做到这一点,以便所有 CASE WHEN
结果都在一个列中。
示例: 三个示例代码:AM1234、AR1357、PD9876。对于前两个,我需要看前两个字符。第一个将在我的输出中转换为 'mammal',第二个将转换为 'reptile.' 对于最后一个,我只需要查看第一个字符,它将在我的输出中转换为 'plant'输出。在整个数据集中,我需要评估5个双字符子串和4个单字符子串。
我可以生成包含两个单独列的内容,一个包含评估那些双字符子字符串产生的值,另一个包含一个字符子字符串产生的值,但我真的希望它们全部进入相同的最后一列。这是我目前正在做的事情:
SELECT EG.elcode
, CASE SUBSTR(EG.elcode, 1, 2) WHEN 'AM' THEN 'mammal'
WHEN 'AR' THEN 'reptile' END AS TAXA_GROUP
, CASE SUBSTR(EG.elcode, 1, 1) WHEN 'P' THEN 'plant' END AS TAXA_GROUP
以上生成的输出包含两个 TAXA_GROUP 列,一列填充了哺乳动物、爬行动物和 null,另一列填充了植物和 null:
elcode | TAXA_GROUP | TAXA_GROUP |
---|---|---|
AM1234 | mammal | null |
AR1357 | reptile | null |
PD9876 | null | plant |
我希望有一个 TAXA_GROUP 列将这两个 SUBSTR()
命令的结果放在一起。
elcode | TAXA_GROUP |
---|---|
AM1234 | mammal |
AR1357 | reptile |
PD9876 | plant |
我尝试连接两列,但出现错误:
SELECT EG.elcode
, CASE SUBSTR(EG.elcode, 1, 2) WHEN 'AM' THEN 'mammal'
WHEN 'AR' THEN 'reptile' END AS TAXA_GROUP1
, CASE SUBSTR(EG.elcode, 1, 1) WHEN 'P' THEN 'plant' END AS TAXA_GROUP2
, TAXA_GROUP1 || TAXA_GROUP2 AS TAXA_GROUP
Error: An error occurred while running query. ORA-00904: "TAXA_GROUP2": invalid identifier
我在这个网站上搜索时,发现了类似的问题,但大多数与当您不知道字符串的长度(需要正则表达式)时使用 SUBSTR()
相关,而这里不是这种情况。
第 1 - 5 行中的示例数据;完成这项工作的代码从第 6 行开始。
SQL> with test (elcode) as
2 (select 'AM1234' from dual union all
3 select 'AR1357' from dual union all
4 select 'PD9876' from dual
5 )
6 select elcode,
7 case when substr(elcode, 2, 1) = 'M' then 'mammal'
8 when substr(elcode, 2, 1) = 'R' then 'reptile'
9 when substr(elcode, 1, 1) = 'P' then 'plant'
10 end taxa_group
11 from test;
ELCODE TAXA_GROUP
------ ----------
AM1234 mammal
AR1357 reptile
PD9876 plant
SQL>
我会使用 LIKE
。更简单:
select elcode,
(case when elcode like 'AM%' then 'mammal'
when elcode like 'AR%' then 'reptile'
when elcode like 'P%' then 'plant'
end) taxa_group
from t;
但重点是您需要单独的 case
条件,而不是只比较一个值。