Oracle内建函数小结

这不是一篇格式规整、逻辑严谨、内容引人致胜的博客,只是工作中碰到的博主自己认为常用且值得一记的随手笔记。

1.ROW_NUMBER()

用来标注行号,用法如下

SELECT 
	ROW_NUMBER() OVER(PARTITION BY T.PARTITION_FIELD ORDER BY T.SORT_FIELD) RN,
	T.OTHER_FIELD1,
	T.OTHER_FIELD2 
FROM TABLE_NAME T;

语句中的T.PARTITION_FIELD指示分组字段,比如男/女,那么得到的行号就是男性的1-N号和女性的1-N号。

2.LISTAGG()

常用的场景是将多行合并为一行,用法如下:

SELECT 
	T.GROUP_FIELD,
	LISTAGG(T.MERGE_FIELD,',') WITHIN GROUP(ORDER BY T.MERGE_FIELD)
FROM TABLE_NAME T
GROUP BY T.GROUP_FIELD

多行记录合并且多行显示

SELECT 
	T.GROUP_FIELD,
	LISTAGG(T.MERGE_FIELD,',') WITHIN GROUP(ORDER BY T.MERGE_FIELD) OVER((PARTITION BY T.GROUP_FIELD)
FROM TABLE_NAME T

3.TRUNC()

可以视作日期时间类型或者数字类型的截取函数
(1)截取日期时间

select sysdate from dual
select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual?
select trunc(sysdate,'yyyy') from dual?--当年的第一天
select trunc(sysdate,'mm') from dual?--当月的第一天
select trunc(sysdate,'dd') from dual?--当前时间(精确到天)
select trunc(sysdate,'d') from dual?--当前星期的第一天
select trunc(sysdate,'hh') from dual?--当前时间(精确到小时)
select trunc(sysdate,'mi') from dual?--当前时间(精确到分钟,没有精确到秒的)

(2)截取数字

select trunc(12345.6,-1) from dual ?//结果是:12340,其中-1表示从小数点左边第一位截取后面全置为零
select trunc(1.23456,1) from dual ? //结果是:1.2,其中1表示从小数点左边第一位截取后面全置为零
select trunc(12345.6) from dual ? //结果是:12345,截取整数部分
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值