decode函数的几种用法详解

decode的几种用法
1:使用decode判断字符串是否一样
DECODE(value,if1,then1,if2,then2,if3,then3,...,else)
含义为
IF 条件=值1 THEN
    RETURN(value 1)
ELSIF 条件=值2 THEN
    RETURN(value 2)
    ......
ELSIF 条件=值n THEN
    RETURN(value 3)
ELSE
    RETURN(default)
END IF


sql测试
select empno,decode(empno,7369,'smith',7499,'allen',7521,'ward',7566,'jones','unknow') as name from emp where rownum<=10
输出结果
7369 smith
7499 allen
7521 ward
7566 jones
7654 unknow
7698 unknow
7782 unknow
7788 unknow
7839 unknow
7844 unknow




2:使用decode比较大小
select decode(sign(var1-var2),-1,var 1,var2) from dual
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1
sql测试
select decode(sign(100-90),-1,100,90) from dual
输出结果
90
100-90=10>0 则会返回1,所以decode函数最终取值为90
反正
select decode(sign(100-90),1,100,90) from dual
输出结果
100
100-90=10>0返回1,判断结果为1,返回第一个变量100,最终输出结果为100




3:使用decode函数分段
工资大于5000为高薪,工资介于3000到5000为中等,工资小于3000为低薪
sql测试
SELECT 
    ename,sal,
    DECODE(SIGN(sal - 5000),
            1,
            'high sal',
            0,
            'high sal',
            - 1,
            DECODE(SIGN(sal - 3000),
                    1,
                    'mid sal',
                    0,
                    'mid sal',
                    - 1,
                    DECODE(SIGN(sal - 1000),
                            1,
                            'low sal',
                            0,
                            'low sal',
                            - 1,
                            'low sal')))
FROM
    emp
输出结果
SMITH   800   low sal
ALLEN 1600 low sal
WARD 1250 low sal
JONES 2975 low sal
MARTIN 1250 low sal
BLAKE   2850 low sal
CLARK 2450 low sal
SCOTT 3000 mid sal
KING  5000 high sal
TURNER 1500 low sal
ADAMS 1100 low sal
JAMES 950         low sal
FORD 3000 mid sal
MILLER 1300 low sal


4:利用decode实现表或者试图的行列转换
sql测试
SELECT 
       SUM(DECODE(ENAME,'SMITH',SAL,0))  SMITH,
       SUM(DECODE(ENAME,'ALLEN',SAL,0))  ALLEN,
       SUM(DECODE(ENAME,'WARD',SAL,0))   WARD,
       SUM(DECODE(ENAME,'JONES',SAL,0))  JONES,
       SUM(DECODE(ENAME,'MARTIN',SAL,0)) MARTIN FROM EMP
输出结果如下
SMITH  ALLEN  WARD   JONES  MARTIN
  800  1600   1250       2975       1250


5:使用decode函数来使用表达式来搜索字符串
decode (expression, search_1, result_1, search_2, result_2, ...., search_n, result_n, default)
decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。
sql测试
SELECT 
    ENAME,
    SAL,
    DECODE(INSTR(ENAME, 'S'),
            0,
            '不含有s',
            '含有s') AS INFO
FROM
    EMP
输出结果
SMITH 800           含有s
ALLEN 1600   不含有s
WARD 1250   不含有s
JONES 2975    含有s
MARTIN 1250    不含有s
BLAKE 2850    不含有s
CLARK 2450    不含有s
SCOTT 3000   含有s
KING 5000   不含有s
TURNER 1500   不含有s
ADAMS 1100   含有s
JAMES 950            含有s
FORD 3000   不含有s
MILLER 1300   不含有s

  • 20
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`decode()` 函数是 Python 中字符串对象的一个方法,用于将字节序列解码为字符串。以下是 `decode()` 函数几种用法: 1. 基本用法:`str.decode(encoding='UTF-8',errors='strict')` - `encoding`:指定要使用的编码格式,默认为 UTF-8。 - `errors`:指定如何处理解码错误,默认为 'strict',表示遇到错误会抛出异常。其他可选值有 'ignore'(忽略错误)、'replace'(用 ? 取代错误字符)等。 示例代码: ```python b = b'\xe4\xb8\xad\xe6\x96\x87' # UTF-8 编码的字节序列 s = b.decode() # 使用默认编码格式解码 print(s) # 输出:中文 ``` 2. 使用多个编码格式尝试解码:`str.decode(encoding=('UTF-8', 'GBK', ...),errors='strict')` 可以指定多个编码格式,解码时会依次尝试使用这些编码格式,直到解码成功或全部失败为止。如果全部失败,会抛出异常。 示例代码: ```python b = b'\xb1\xe0\xcd\xe2' # GB2312 编码的字节序列 s = b.decode(('UTF-8', 'GBK', 'GB2312')) # 尝试使用多个编码格式解码 print(s) # 输出:中文 ``` 3. 以指定的方式处理解码错误:`str.decode(encoding='UTF-8',errors='ignore')` 或 `str.decode(encoding='UTF-8',errors='replace')` - `errors='ignore'`:忽略解码错误。 - `errors='replace'`:用 ? 取代解码错误的字符。 示例代码: ```python b = b'\xe4\xb8\xad\xff\xe6\x96\x87' # UTF-8 编码的字节序列,其中有一个错误的字节 s1 = b.decode(errors='ignore') # 忽略解码错误 s2 = b.decode(errors='replace') # 用 ? 取代解码错误的字节 print(s1) # 输出:中文 print(s2) # 输出:中?文 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值