DECODE 函数将该数值与一系列的序偶相比较,以决定最后的返回结果 。序偶序偶,就是成对出现 ; 我们将这个函数与 switch 比较,我们发现他们基本相似,唯一不同的是 switch 将要比较的值放在 case 后面都加上了 break 中。
以下一个例子:
SELECT id,
DECODE(flag,’Y’,'Yes’,'N’,’No’,NULL,’None’,'Yes’)
FROM t_test;
当 t_test 的 flag 字段为 Y 时返回 Yes ,为 N 时返回 No ,为 NULL 时返回 None ,默认返回 Yes 。
看看我遇到的问题:
SELECT a.id,
a.user_name,
a.oper_time time2,
a.oper_type,
a.description,
a.oper_flag,
decode(a.oper_flag, '1', ' 成功 ', ' 失败 ') oper_flag,
a.ip,
b.true_name
FROM SEC_LOG_OPERATION a
left join sec_user b on a.user_name = b.user_name
where 1 = 1
order by oper_time desc
原来这红色部分是: decode(a.oper_flag, 1, ' 成功 ', ' 失败 ')
在查询的时候会报错,原因是 oper_flag 这个字段数据中有非数字类型,也就是这个字段不仅有 1 、 0 ,还有 “ 失败 ” ,这样数据不等于字符。 所以把 1 当字符处理就可以了。