我有一个select语句,它有一列是代码值。例如,用jv代替java,用python代替py。但是,我不想输出编码值,而是将它们显示为java或python,即它们的完整描述。有没有一种方法可以用pl/sql实现这一点?任何帮助都将不胜感激,谢谢!
myss37ts1#
你可以用 case 表达式
case
select case when myColumn = 'JV' then 'Java' when myColumn = 'PY' then 'Python' end as myColumn from yourTable
在 oracle 你可以用 decode 也。
oracle
decode
decode(col, 'JV', 'Java', 'PY', 'Python' 'No Match' )
8nuwlpux2#
鉴于您使用的是oracle,我建议您使用 DECODE 功能:
DECODE
SELECT col, DECODE(col, 'JV', 'Java', 'PY', 'Python', 'Not found') AS col_out FROM yourTable;
rbpvctlc3#
您可以使用“decode”函数或“case”构造,如下所示:
select DECODE(my_column, 'JV','Java', 'PY','Python', 'no_match_found') my_column_alias from my_table; select case my_column when 'JV' then 'Java' when 'PY' then 'Python' else 'no_match_found' end my_column_alias from my_table;
pw9qyyiw4#
虽然对给定的样本数据有几种硬编码方法,但对于非常有限的数据集,没有一种方法是合适的。正确的方法是创建查找表。在本例中包含代码和相应的名称。是的,对于两种语言来说,这是相当过分的,但是tiobe索引或者wikipedia中列出的700个,或者hopl列表中估计的大约9000个呢。请参阅此处和其他链接。此外,这是一种标准的技术来解决下面的问题:是否有一种方法可以提供关于给定代码值的详细信息。它很容易扩展(只需将行添加到表中)并且适用于几乎所有的域(稍加修改即可)。
-- create language lookup create table language_lookup( code varchar2(8) , name varchar2(200) , description varchar2(4000) , constraint language_lookup_pk primary key (code) ); insert into language_lookup(code, name) select 'JV','Java' from dual union all select 'PY','Python' from dual ; -- your table create table your_table ( id integer , lang_code varchar2(8) --... , constraint your_table_pk primary key (id) , constraint your_table_2_language_lookup_fk foreign key (lang_code) references language_lookup(code) ) ; insert into your_table (id, lang_code) select 1,'JV' from dual union all select 2,'PY' from dual; select yt.lang_code, ll.name from your_table yt join language_lookup ll on ll.code = yt.lang_code where yt.lang_code in ('JV','PY') ; -- now modify to include plsql insert into language_lookup(code, name) values ( 'PLSQL', 'Oracle''s Programming Language extension for SQL'); insert into your_table (id,lang_code) values (3,'PLSQL'); select yt.lang_code, ll.name from your_table yt join language_lookup ll on ll.code = yt.lang_code ;
用你的硬编码值试试。再加上30-40。。。
4条答案
按热度按时间myss37ts1#
你可以用
case
表达式在
oracle
你可以用decode
也。8nuwlpux2#
鉴于您使用的是oracle,我建议您使用
DECODE
功能:rbpvctlc3#
您可以使用“decode”函数或“case”构造,如下所示:
pw9qyyiw4#
虽然对给定的样本数据有几种硬编码方法,但对于非常有限的数据集,没有一种方法是合适的。正确的方法是创建查找表。在本例中包含代码和相应的名称。是的,对于两种语言来说,这是相当过分的,但是tiobe索引或者wikipedia中列出的700个,或者hopl列表中估计的大约9000个呢。请参阅此处和其他链接。
此外,这是一种标准的技术来解决下面的问题:是否有一种方法可以提供关于给定代码值的详细信息。它很容易扩展(只需将行添加到表中)并且适用于几乎所有的域(稍加修改即可)。
用你的硬编码值试试。再加上30-40。。。