Oracle内置函数(2)

Oracle日期型函数
日期类型的函数操作日期、时间类型的相关数据,并返回日期或数字类型的数据
3.1系统日期
1)SYSDATE。该函数没有参数,可以得到系统的当前日期。

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')from dual;

执行结果如下:2019-06-20 10:06:30
2)systimestamp。该函数没有参数,返回系统时间,该时间包含时区信息,精确到微秒。

select systimestamp from dual;

执行结果如下:
20-6月 -19 10.11.40.730000 上午 +08:00
注:年月日是倒着显示的。
3.2得到数据库时区函数
DBTIMEZONE函数。该参数没有参数,返回数据库时区。

select dbtimezone from dual;

执行结果如下:+00:00
3.3为日期加上指定月份
1)add_months(date,integer).该函数将返回在指定的日期上加一个月份数后的日期。参数含义如下:
date:指定的日期
integer:要加的月份数,该值如果为负,则表示减去的月份数。
该函数有些需要注意的地方,当指定的日期是月的最后一天时,最后函数返回的结果也将是新月的最后一天。而如果不知道新的月份比指定日期月份的天数少,则函数将自动回调有效日期。
2)SESSIONTIMEZONE。该函数没有参数,可以返回当前会话的时区。

select sessiontimezone from dual;

执行结果如下:
+08:00
3.4返回指定月份最后一天函数
LAST_DAY(date)。该函数返回参数指定日期对应月份的最后一天。

select last_day(sysdate)from dual;

执行结果如下:2019/6/30 20:21:1
3.5返回指定日期后一周的日期函数
NEXT_DAY(date,char)。该函数返回当前日期向后的一周char的对应日期,char表示的是星期几,全称和缩写都允许,但必须有效。

select sysdate,NEXT_Day(Sysdate,'星期一')from dual;

执行结果如下:2019/6/20 2 2019/6/24 20:19:01
3.6返回会话所在时区当前日期函数
CURRENT_DATE函数。该函数得到会话时区的当前日期。

select sessiontimezone,to_char(current_date,'yyyy-mm-dd hh24:mi:ss')from dual;

执行结果是:+08:00 2019-06-20 20:29:23
该脚本查询的是第8时区当前的系统时间,如果更改会话为第六时区,则可以利用如下脚本:

alter session set time_zone='-6:0';
 select sessiontimezone,to_char(current_date,'yyyy-mm-dd hh24:mi:ss')from dual;

执行结果如下:在这里插入图片描述
3.7提取指定日期特定部分的函数
EXTRACT(datetime).该函数可以从指定的时间当中提取到指定的日期部分,从给定的日期得到年、月、分等。

select 
extract(year from sysdate)year,
extract(minute from timestamp '2019-6-20 20:39:38')min,
extract(second from timestamp '2019-6-20 20:39:38' )sec
from dual;

执行结果是:在这里插入图片描述
3.8得到两个日期之间的月份数
MONTHS_BETWEEN(date1,date2)。该函数返回date1和date2之间的月份数。函数两个参数都为日期型数据。当date1>date2时,如果两个参数表示日期是某月中的同一天,或它们都是某月中的最后一天,则该函数返回一整型数;否则,将返回小数。当date1<date2时则返回一负值。

select 
Months_between(to_date('2019-7-1','yyyy-mm-dd'),to_date('2019-6-1','yyyy-mm-dd'))one,
months_between(to_date('2019-5-31','yyyy-mm-dd'),to_date('2019-4-30','yyyy-mm-dd'))two,
months_between(to_date('2019-5-31','yyyy-mm-dd'),to_date('2019-9-30','yyyy-mm-dd'))three
from dual;

执行结果是:1 1 -4
3.9 时区时间转换函数
NEW_TIME(date,timezone1,timezone2)。该函数将返回时间date在时区timezone1转换到timezone2的时间。

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss')one,
to_char(NEW_TIME(sysdate,'pdt','est'),'yyyy-mm-dd hh24:mi:ss')two
from dual;

执行结果是:在这里插入图片描述
3.10 日期四舍五入、截取函数
1)ROUND(date[,fmt])。该函数将date输入到fmt指定形式。如果参数fmt被省略,则date将被处理到最近的一天。

select TO_char(round(to_date('2019-06-20 21:57:00','yyyy-mm-dd hh24:mi:ss')),'yyyy-mm-dd hh24:mi:ss')from dual;

执行结果是:2019-06-21 00:00:00
2)TRUNC(date[,fmt])。该函数将date截取到fmt指定形式。如果fmt省略,则截取到最近的日期。

select to_char(trunc(to_date('2019-6-20 22:02:56','yyyy-mm-dd hh24:mi:ss')),'yyyy-mm-dd hh24:mi:ss')from dual;

执行结果是:2019-06-20 00:00:00

4 转换函数
转换函数可以完成不同数据类型之间的转换,是平常使用较多的函数之一。
4.1 字符串转ASCII类型字符串函数
ASCIISTR(char)。该函数可将任意字符集的字符串转换为数据库字符集对应的ASCII字符串。char为字符类型。

select ascii('这是测试!')from dual;

执行结果是:\8FD9\662F\6D4B\8BD5\FF01
4.2二进制转十进制
BIN_TO_NUM(date[,date…])。该函数可以将二进制转换成对应的十进制。date表示二进制,一位用‘,’隔开。

select bin_to_num(1),bin_to_num(1,0,0),bin_to_num(1,1,1)from dual;

执行结果是:1 4 7
4.3数据类型转换函数
CAST(expr as type_name)函数。该函数是进行类型转换的,可以把expr参数转换成type_name类型。基本上用于数字与字符之间以及字符与日期类型之间的转换。

select cast('123'as integer)as vhr,
cast(123 as varchar2(8))as num,
cast(sysdate as varchar2(12))as dt from dual;

执行结果是:123 ,123 ,20-6月 -19
4.4 字符串和ROWID相互转换函数
1)chartorowid(char)。该函数将字符串类型转换成ROEID类型。char为待转的字符串,其类型可以是char、varchar2、nchar、nvarchar2,但必须符合rowid格式,长度是18.每一条记录都有rowid,rowid在整个数据库中为一,可以利用select查询该字段。

select chartorowid ('AAARXAABAAAVgggAB')from dual;

执行结果是:AAARXnAABAAAVggAAB
2)rowidtochar(rowid)。该函数将行记录的rowid转换成字符串。参数rowid长度为18,所以返回结果长度18.

select rowidtochar(rowid) from productionfo;

执行结果是:AAASiTAABAAAVsRAAC
AAASiTAABAAAVsRAAD
AAASiTAABAAAVsRAAE
AAASiTAABAAAVsRAAF
AAASiTAABAAAVsRAAG
AAASiTAABAAAVsRAAH
6 rows selected
3)rowidtonchar(rowid)。同rowidtochar(rowid)操作相同,但是返回类型是nvarchar2.
4.5字符串在字符集间转换函数
CINVERT(char,dest_char_sest[,source_char_set])。该函数用于把字符串从一个字符串集转移到另一个字符集。各参数表示的含义是:
char:等待转换的字符。可以是char,varchar2,nchar, nvarchar2,clob,nclob
dest_char_sets:转变后的字符
source_char_set:原字符集,如果没有该参数,则默认数据库实力字符集。

select convert('测试''US7ASCII','ZHS16GBK')from dual;

执行结果是:??
4.6十六进制字符串与RAW类型相互转换
1)HEXTORAW(char)。该函数把十六进制的字符串转换成raw类型的数据。其中参数char表示一个十六进制字符组成的字符串。

select HEXTORAW('4d')from dual;

执行结果如下:4D
2)RAWTOHEX(raw)。与HEXTORAW函数相反,它把raw类型表示成一个由十六进制字符表示的串,返回varch2类型。

select rawtohex('4D')from dual;

执行结果是:3444
3)RAWTONHEX(raw)。同函数RAWTOHEX(raw)转换效果相同,不过返回的类型是NVARCHAR2类型,而不是VARCHAR2类型。
4.7数值转换成字符型函数
1)TO_CHAR(number)。该函数将一个数值型参数转换成字符型数据。
TO_CHAR(n,[,[,fmt[nlsparam]]),各参数的含义是:
n:数值型数据。
fmt:要转换成字符的格式。
nlsparam:由于该参数指定fmt的特征。通常包括小数点字符、组分隔符、本地钱币符号。

select to_char(16.89,'99.9')to_char(16.89)from dual;

执行结果:16.9 16.89
2)TO_CHAR(date)。该函数将一个日期型数据转换成一个字符型数据。
TO_CHAR(n,[,fmt[,nlsparam]])
n:日期类型数据
fmt:要转换成字符的格式
nlsparam:使用的语言类型

select to_char(sysdate,'yyyy-mm-dd'),
to_char(sysdate,'hh24:mi:ss'),
to_char(sysdate,'month','nls_date_language=english')
from dual;

执行结果是:
在这里插入图片描述
4.8字符转日期形函数
TO_DATE。该函数可将字符型数据转换成日期型数据。
TO_DATE(char,[,fmt[,nlsparam]])。各参数的具体含义:
char:待转换的字符。类型可以是char,varchar2,nchar,nvarchar2。
fmt:表示转换的格式
nlsparam:控制格式化时使用的语言类型。

select to_char(to_date('2019-7-1','yyyy-mm-dd'),'month')from dual;

执行结果如下:7月
4.9字符串转数字函数
TO_number(expr[,fmt[,nlsparam]])。该函数将字符串转成数字。
各参数的含义如下:
expr:待转字符,其类型可以是char,varchar2,nchar,nvarchar2。
fmt:指定转换的数字格式。
nlsparam:该参数指定fmt的特征。通常包括小数点字符、分组隔符、本地钱币符号。

select to_number('2456.304','9999.999')from dual;

执行结果如下:2456.304
4.10全角转半角函数
TO_SINGLE_BYTE(char)。该函数将全角转为半角。char的类型可以是插入,varchar2,nchar,nvarchar。

select to_single_byte('THIS IS A TEST')from dual;

执行结果是:THIS IS A TEST

5 、NULL函数
null是用来处理空值时比较好的选择。
5.1返回表达式为NULL的函数
COALESCE(expr)。返回列表中第一个不为null的表达式。如果都为null,则返回一个null。

select coalesce(null,9-9,null)from dual;

执行结果是:0
5.2 排除指定条件
LNNVL(condition)。该函数可以得到除了condition要求条件之外的数据,包括null的条件,通常用于where条件中。

select * from productionfo where lnnvl(quantity>=70);

在这里插入图片描述
这里是得到productionfo表中数量低于70 的产品,并包含数量为null的数据。
5.3替换NULL值函数
1)NVL(expr1,expr2)函数。替换NULL值,表示如果expr1为NULL值,则返回expr2,否则返回expr1的值。该函数要求两个参数类型一致,至少相互间能进行隐式的转换,否则会提示出错。

select productname,nvl(quantity,0),category from productionfo;

执行结果是:在这里插入图片描述
表示查询productionfo表中的数量,如果记录中有该字段为空的,则用0替换。

6、 集合函数
集合函数经常配合group by或having子句使用,当然它们还可以单独使用。该类型的函数中除了count函数都会忽略值为null的数据。
6.1 求取平均值函数
AVG([distanct|all]expr)。该函数可求取指定列的平均值,表示某组的平均值,返回数值类型。具体参数的具体含义是:
distinct:去除重复的值
all:表示所有的值,包括重复的值,也是默认值
expr: 表达式。只能是数值类型。

select avg(all productprice+100)from productionfo;

执行结果是:在这里插入图片描述
2)使用该函数时,where条件子句中可以使用条件。

select avg(all productprice)from productionfo group by category;

执行结果是:在这里插入图片描述
3)

select avg(all productprice)from productionfo where productprice>2000;

执行结果是:在这里插入图片描述
该函数的返回值的精度与列的数据类型和是否有小数有关。
6.2求记录数量的函数
COUNT(*|[distinct][all]expr)函数。该函数可以用来计算记录的数量或某列的个数。函数必须指定列名,或者用星号。
*:表示计算所有的记录
distinct:表示去除重复的记录
all:代表所有的,是默认选项
expr:要计算的对象,通常是表的列
1)查询表的所有记录

select count(*)from productionfo;

执行结果是:6
2)查询不重复的记录

select count(distinct productprice)from productionfo where productprice<3000;

执行结果是:5
6.3 返回最大、最小值函数
MAX/MIN([distinct|all]expr)函数。
该函数可返回指定列中的最大值(最小值)通常都在where子句中的子查询。
distinct:表示去重复。
all:代表所有的,是默认选项
expr:表的列

select * from productionfo where productprice=(select max(productprice)from productionfo);

执行结果是:
在这里插入图片描述
6.4求和函数
SUM([distinct|all]expr)函数。该函数不同于count函数,它分组计算指定列的和,如果不使用分组,则函数默认把整个表作为一组。
distinct:表示去除重复的记录
all:代表所有的,是默认选项
expr:表的列

select sum(all quantity),category from productionfo group by category;

执行结果是:
在这里插入图片描述

7、其他函数
1)USERENV(parameter)函数。返回当前会话的信息。例如:当参数为Language 时可以返回当前会话对应的语言,字符集等。SESSIONID可返回当前会话ID。ISDBA可返回当前用户是否为dba。

select user from dual;
select userenv('language')from dual;
select userenv('ISDBA')from dual;

执行结果是:
在这里插入图片描述
2)SYS_CONTEXT(namespace,parameter)函数。该函数可以得到oracle已经创建的context,名为USERENV的属性对应值。

select sys_context('userenv','session_user')session_user from dual;

执行结果是:
在这里插入图片描述
7.3 表达式匹配函数
DECODE函数。该函数的具体语法是:DECODE(expr1,search,result[,search1,result1][,default])。该函数的执行过程是,当expr符合条件search时就返回result的值,该过程可以重复多个,如果最后没有匹配的结果,可以返回默认值default,注意它是一对一的匹配过程。

selectproductname,quantity,decode(sign(quantity-100,1,'充足'-1,'不足',0,'不足')from productionfo;

执行结果是:在这里插入图片描述
综上,列出常用的内置函数。

猜你喜欢

转载自blog.csdn.net/chunfenxiaotaohua/article/details/93150204