Oracle将一列分成多列 和 行转列

一列分成多列方法:

1.SELECT REGEXP_SUBSTR(name,'^[^ ]*') first_name, REGEXP_SUBSTR(name, '([[:alpha:]]+)$') middle_name FROM CELEBRITY

2.SELECT SUBSTR(NAME, 1, INSTR(NAME, ' ')-1) FIRST_NAME, SUBSTR(NAME, INSTR(NAME, ' ')+1) MIDDLE_NAME FROM CELEBRITY

3.SELECT
  SUBSTR(NAME, 1, SPACE_POS-1) FIRST_NAME,
  SUBSTR(NAME, SPACE_POS+1) MIDDLE_NAME
FROM (SELECT NAME,INSTR(NAME, ' ') SPACE_POS
FROM CELEBRITY)

行转列

select t.user_name as 姓名,
    MAX(decode(t.course,'语文',score,null)) as 语文,
    MAX(decode(t.course,'数学',score,null)) as 数学,
    MAX(decode(t.course,'英语',score,null)) as 英语
from RowToCol t group by t.user_name  order by t.user_name
 

*当要分组的值,如例子中的score列是数值型,则聚集函数可以使用sum/max/min/avg,但是字符行的只能使用max/min。

取小数点值  select regexp_substr('12.12元/小时', '\d*(\d*\.\d*)?') from dual

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值