PostgreSQL实现Oracle的decode函数功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PostgreSQL实现Oracle的decode函数功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3203字,纯文字阅读大概需要5分钟。
内容图文
![PostgreSQL实现Oracle的decode函数功能](/upload/InfoBanner/zyjiaocheng/874/55473191063146b4acd0a5b230619acb.jpg)
PostgreSQL实现Oracle的decode函数功能
相关链接:https://blog.csdn.net/weixin_34242509/article/details/92974392
create or replace function decode(variadic p_decode_list text[])
returns text
as
$$
declare
-- 获取数组长度(即入参个数)
v_len integer := array_length(p_decode_list, 1);
-- 声明存放返回值的变量
v_ret text;
begin
/*
* 功能说明:模拟Oracle中的DECODE功能(字符串处理, 其它格式可以自行转换返回值)
* 参数说明:格式同Oracle相同,至少三个参数
* 实现原理: 1、VARIADIC 允许变参; 2、Oracle中的DECODE是拿第一个数依次和之后的偶数位值进行比较,相同则取偶数位+1的数值,否则取最后一位值(最后一位为偶数为,否则为null)
*/
-- 同Oracle相同当参数不足三个抛出异常
if v_len >= 3 then
-- Oracle中的DECODE是拿第一个数依次和之后的偶数位值进行比较,相同则取偶数位+1的数值
for i in 2..(v_len - 1) loop
v_ret := null;
if mod(i, 2) = 0 then
if p_decode_list[1] = p_decode_list[i] then
v_ret := p_decode_list[i+1];
elsif p_decode_list[1] <> p_decode_list[i] then
if v_len = i + 2 and v_len > 3 then
v_ret := p_decode_list[v_len];
end if;
end if;
end if;
exit when v_ret is not null;
end loop;
else
raise exception 'UPG-00938: not enough args for function.';
end if;
return v_ret;
end;
$$
language plpgsql;
-- 测试1
select decode('_a','_aa', 'x') a3,
decode('_a','_aa', 'x', 's') a4,
decode('_a', '_aa', 'x', '_b', 's') a5,
decode('_b', '_aa', 'x', '_b', 's') a5,
decode('_a', '_aa', 'x', '_b', 's', 'o', 'x', 'tt') a6;
-- 测试2
with xx as
(
select 'M' sex
union all
select 'F' sex
union all
select 'X' sex
union all
select 'Z' sex
union all
select '' sex
)
select sex, decode(sex, 'M', '男', 'F', '女', decode(sex, 'X', '变性', '其它')) from xx;
内容总结
以上是互联网集市为您收集整理的PostgreSQL实现Oracle的decode函数功能全部内容,希望文章能够帮你解决PostgreSQL实现Oracle的decode函数功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。