这不是一篇格式规整、逻辑严谨、内容引人致胜的博客,只是工作中碰到的博主自己认为常用且值得一记的随手笔记。
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,截取整数部分