Oracle常用函数

 /************** Oracle常用函数 ********************/

SELECT AVG(T.ID) FROM TY_USER_SYS T 查询平均值
COUNT() -- 返回行数
FIRST() --SELECT * FROM TABLE1 WHERE ROWNUM <= 2 查询前2

--类似于Mysql的limit,3层子查询嵌套是为了方便封装,让最基本的查询语句和分页的逻辑完全分离
SELECT * FROM(
    SELECT SEA_SUB_T.*,ROWNUM SEA_RNO FROM (
        SELECT * FROM TY_USER_SYS
    )    SEA_SUB_T WHERE ROWNUM <= 4
) WHERE SEA_RNO >=2

MAX() -- 返回最大值
MIN() -- 返回最小值
SUM() -- 返回总和


SELECT UPPER('acc') FROM DUAL -- 将某个字段转换为大写
SELECT LOWER('ABCD') FROM DUAL -- 将某个字段转换为小写
SELECT LENGTH('abcde') FROM DUAL -- 返回某个文本字段的长度
SELECT ROUND(3.54) FROM DUAL -- 对某个数值字段进行指定小数位数的四舍五入
SELECT SYSDATE FROM DUAL; -- 返回当前的系统日期和时间
SELECT SYSTIMESTAMP FROM DUAL; -- 返回当前的系统日期和时间

/************** 字符串 ********************/

SELECT SUBSTR('abcde', 1, 3) FROM DUAL 字符串截取1-3,1指的是字符串第一位;

SELECT INSTR('小鸡快跑小鸡快跑', '小',2,2) FROM DUAL 字符串查索引
格式一:instr( string1, string2 )/ instr(源字符串, 目标字符串)
格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) / instr(源字符串, 目标字符串, 起始位置, 匹配序号)
在string1中查找string2 ,从start_position开始检索(包含start_position),第nth_appearance(几)次出现string2,字符串只检索一遍。

SELECT TRIM('    a ') FROM DUAL;--去除空格
SELECT LTRIM('    a ') FROM DUAL;--去除空格
SELECT RTRIM('    a ') FROM DUAL;--去除空格

SELECT CONCAT('abc', 'def') FROM DUAL;--字符串连接
SELECT 'abc'||'def'||'' FROM DUAL;--字符串连接

SELECT  wmsys.wm_concat(T.ID) FROM TY_ROLE_SYS T;--同一列的所有值用逗号拼接

SELECT REPLACE('小鸡快跑','小','大') FROM DUAL;--字符替换

/************** Oracle模糊查询 ********************/

做模糊查询instr()优于like()

instr(字段,'关键字')>0相当于 字段like '%关键字%'
instr(字段,'关键字')=1相当于 字段like '关键字%'
instr(字段,'关键字')=0相当于 字段not like '%关键字%'

日期格式化

/**************日期 -> 字符串********************/
SELECT TO_CHAR(SYSDATE,'yyyy-mm-dd hh24:mi:ss') as nowTime FROM DUAL; --日期转化为字符串
SELECT TO_CHAR(SYSDATE,'yyyy')as nowYear FROM DUAL; --获取时间的年
SELECT TO_CHAR(SYSDATE,'mm')as nowMonthFROM DUAL; --获取时间的月
SELECT TO_CHAR(SYSDATE,'dd')as nowDayFROM DUAL; --获取时间的日
SELECT TO_CHAR(SYSDATE,'hh24')as nowHour FROM DUAL; --获取时间的时
SELECT TO_CHAR(SYSDATE,'mi')as nowMinute FROM DUAL; --获取时间的分
SELECT TO_CHAR(SYSDATE,'ss')as nowSecond FROM DUAL; --获取时间的秒


SELECT TO_DATE('05 Dec 2000', 'DD Mon YYYY') FROM DUAL;

SELECT TO_TIMESTAMP_TZ('2009-3-9 17:51:23.23 -05:00','YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') FROM DUAL;
to_date(''2004-11-27 13:34:43'', ''yyyy-mm-dd hh24:mi:ss'') 将得到具体的时间

select sysdate S1,
    round(sysdate) S2 ,
    round(sysdate,'year') YEAR,
    round(sysdate,'month') MONTH,
    round(sysdate,'day') DAY from dual -- 时间取整
    
多种日期格式:

YYYY:四位表示的年份
YYY,YY,Y:年份的最后三位、两位或一位,缺省为当前世纪
MM:01~12的月份编号
MONTH:九个字符表示的月份,右边用空格填补
MON:三位字符的月份缩写
WW:一年中的星期
D:星期中的第几天
DD:月份中的第几天
DDD:年所中的第几天
DAY:九个字符表示的天的全称,右边用空格补齐
HH,HH12:一天中的第几个小时,12进制表示法
HH24:一天中的第几个小时,取值为00~23
MI:一小时中的分钟
SS:一分钟中的秒
SSSS:从午夜开始过去的秒数
FF:

TRUNC函数

/**************日期********************/
--TRUNC 的英文是TRUNCATE,截短的意思,处理日期的时候,用于截取日期的一部分信息(获取不同精度的日期)
SELECT TRUNC(SYSDATE) FROM DUAL; --2018-06-04 00:00:00 今天的日期为2018-06-04 00:00:00
SELECT TRUNC(SYSDATE, 'mm') FROM DUAL; --2018-06-01 00:00:00 返回当月第一天.
SELECT TRUNC(SYSDATE,'yy') FROM DUAL; --2018-01-01 00:00:00 返回当年第一天
SELECT TRUNC(SYSDATE,'dd') FROM DUAL; --2018-06-04 00:00:00 返回当前年月日
SELECT TRUNC(SYSDATE,'yyyy') FROM DUAL; --2018-01-01 00:00:00 返回当年第一天
SELECT TRUNC(SYSDATE,'d') FROM DUAL; --2018-06-03 00:00:00 (星期天)返回当前星期的第一天
SELECT TRUNC(SYSDATE, 'hh') FROM DUAL; --2018-06-04 14:00:00 当前时间为17:35
SELECT TRUNC(SYSDATE, 'mi') FROM DUAL; --2018-06-04 14:54:00 TRUNC()函数没有秒的精确
/***************数字********************/
/*
    TRUNC(number,num_digits)
    Number 需要截短的数字,
    Num_digits 大于0取整数前n位,小于0取小数后n位
    TRUNC()函数截取时不进行四舍五入
*/
select trunc(123.458) FROM DUAL; --123
select trunc(123.458,0) FROM DUAL; --123
select trunc(123.458,1) FROM DUAL; --123.4
select trunc(123.458,-1) FROM DUAL; --120
select trunc(123.458,-4) FROM DUAL; --0
select trunc(123.458,4) FROM DUAL; --123.458
select trunc(123) FROM DUAL; --123
select trunc(123,2) FROM DUAL; --123
select trunc(123,-3) FROM DUAL; --120

SELECT    lEAD(T.ID, 1 , NULL) OVER (ORDER BY T.ID) NEXT_ID,
    T.ID,
    lAG(T.ID, 1 , NULL) OVER (ORDER BY T.ID) PRE_ID
FROM TY_USER_SYS T ORDER BY T.ID
--查询前一条ID,当前ID和后一条ID


SELECT DECODE(1,'1','相等','不相等') FROM DUAL;
--decode(字段或字段的运算,a,b,c)
--当字段或字段的运算的值等于a时,该函数返回b,否则返回c


 

原文地址:https://www.cnblogs.com/chenss15060100790/p/9104100.html