一、oracle 以字符串类型字段排序
首先查看建表语句
CREATE TABLE TESTTP (
ID NUMBER PRIMARY KEY,
TCODE VARCHAR2(50),
TCOLOR VARCHAR2(1000))
然后往里面插入数据,数据如下图
从上面的图看来,默认是以ID进行排序展示的,但是假如我现在要以TCODE进行排序呢,且要求004排在第一位,002排在第二位,006排在第三位,008排在第四位,这样我们应该怎么实现呢
答案:可以利用decode函数
sql如下:
select * from TESTTP order by DECODE(TCODE,'004',1),DECODE(TCODE,'002',2),DECODE(TCODE,'006',3),DECODE(TCODE,'008',4);
展示结果如下
二、decode函数的用法
1.含义解释:
decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)
该函数的含义如下:
IF 条件=值1 THEN
RETURN(翻译值1)
ELSIF 条件=值2 THEN
RETURN(翻译值2)
......
ELSIF 条件=值n THEN
RETURN(翻译值n)
ELSE
RETURN(缺省值)
END IF
2.结合order by对字符列进行特定的排序
用法如第一大点所示
3.翻译值
需求:需要将tcode对应004的展示为代表蓝色,002的展示位代表红色,006的展示为代表绿色,008的展示位代表黑色
sql为
select t.id,t.tcolor,t.tcode,decode(t.tcode,'004','代表蓝色','002','代表红色','006','代表绿色','008','代表黑色') as colorful from TESTTP t
展示结果如下
4.判断字段值是否为空
需求:查询出TCODE为空的数据,并标识为没有颜色
在进行判空之前往表里插入一条TCODE为空的数据,插入后展示结果如下‘’
sql:
select t.id,t.tcolor,decode(t.tcode,null,'没有颜色',t.tcode) tcode from TESTTP t
展示结果如下
4.结合sign函数进行大小比较
a)比较大小函数 SIGN
sign()函数根据某个值是0、正数还是负数,分别返回0、1、-1 ,例如:
引用 a=10,b=20 则sign(a-b)返回-1
需求:查询出id为10以下,刚好为10,大于10的数据,并标识出来
sql:
select decode(sign(t.id -10),-1,'10以下',0,'刚好为10',1,'10以上') as overTen,t.id,t.tcolor,t.tcode from TESTTP t