Oracle常用函数使用介绍

liuqiang 2021年01月11日 53次浏览

trunc

用于截取时间或者数值,返回指定的值

example:

返回当月第一天

select trunc(sysdate,'MM') from dual;
result: 2021-01-01 00:00:00

返回当年第一天

select trunc(sysdate,'yy') from dual

返回当前日期 格式为 yyyy-MM-dd :00:00:00

select trunc(sysdate) from dual
trunc(sysdate,'yyyy') --返回当年第一天。
trunc(sysdate,'mm') --返回当月第一天。
trunc(sysdate,'d') --返回当前星期的第一天。
trunc(sysdate,'dd')--返回当前年月日

months_between

MONTHS_BETWEEN返回日期date1和date2之间的月数。 如果date1晚于date2,则结果为正。 如果date1早于date2,则结果为负数。 如果date1和date2是月份的同一天或月份的最后几天,则结果始终是整数。 否则,Oracle数据库将基于31天的月份来计算结果的小数部分,并考虑时间组件date1和date2的差异。

example:

SELECT MONTHS_BETWEEN 
   (TO_DATE('02-02-1995','MM-DD-YYYY'),
    TO_DATE('01-01-1995','MM-DD-YYYY') ) "Months"
    FROM DUAL;

result:
1.03225806451612903225806451612903225806

cast

CAST()函数可以进行数据类型的转换。
语法:cast( 列名/值 as 数据类型 )

example:

将字符串转换为整型。
SELECT CAST('123' AS int) as result from dual;

ceil

ceil(n) 取大于等于数值n的最小整数;

add_months

add_months(time,months)可以得到某一时间之前或之后n个月的时间
example:
查询指定时间的下一个月的时间:
select add_months(sysdate,1) from dual;

last_day

LAST_DAY 函数返回指定日期对应月份的最后一天。结果为当前月最后一天 + 当前日期的时间

example:

select LAST_DAY(ADD_MONTHS(sysdate, 1)) from dual

execute result

2021-02-28 16:16:21

to_char

数值型或者日期型转化为字符型

函数返回描述例子
to_char(timestamp, text)text把 timestamp 转换成 stringto_char(timestamp 'now','HH12:MI:SS')
to_char(int, text)text把 int4/int8 转换成 stringto_char(125, '999')
to_char(float, text)text把 float4/float8 转换成 stringto_char(125.8, '999D9')
to_char(numeric, text)text把 numeric 转换成 stringto_char(numeric '-125.8', '999D99S')

获取日期月份字符串表现形式:
select TO_CHAR(sysdate,'MM') from dual;

abs

abs(n) 返回n的绝对值,该函数以任何数字数据类型或任何可以隐式转换为数字数据类型的非数字数据类型作为参数;
函数返回与参数的数字数据类型相同的数据类型。

日期转换

to_date

example:
select to_date('2005-01-01 13:14:20','yyyy-MM-dd HH24:mi:ss') from dual;

to_char

select to_char(sysdate,'YYYYMMDD') from dual

instr

字符查找函数

instr()用法
格式一:
instr( C1, C2)

instr(源字符串, 目标字符串)

select instr('hellohello','h') from dual
返回结果:1,从1开始数,直到第一次出现h的位置

select instr('hellohello','ll') from dual
返回结果:3,从1开始数,知道第一次出现ll的位置

格式二:
instr( C1,C2,I,J )

instr(源字符串, 目标字符串, 起始位置, 匹配序号)
C1 被搜索的字符串
C2 希望搜索的字符串
I 搜索的开始位置,默认为1
J 出现的位置,默认为1

在C1中搜索C2,从第 I 个位置开始搜索(包括这个I),直到出现第J次C2,返回这个序号,(I 也可以为负数,表示从倒数第一个位置开始数,但是返回的序号还是从正的数的那个序号)

示例:
select instr('hellohello','l',2,2) from dual;

返回结果:4    也就是说:在"hellohello"的第2(e)号位置开始,查找第二次出现的“l”的位置

示例:
select instr('hellohello','l',-1,1) from dual;

返回结果:9    也就是说:在"hellohello"的倒数第1(o)号位置开始,往回查找第一次出现的“l”的位置,然后这个位置在正数的序号
decode

decode(条件,值1,返回值1,值2,返回值2,…值n,返回值n,缺省值)