一、单行函数之日期函数
1.trunk(x[,y])——对x进行截断;
2.round(x[,y])——对x进行取整;
3.next_day(x,day)——返回从x开始,一个day的日期;
4.months_between(x,y)——返回x和Y之间的差值;
5.last_day(x)——返回包含该月的最后一天;
6.add_months(x,y)——返回x加上y个月后的结果。
例1:查询当前系统日期
解:注意sysdate的用法:
注意Oracle默认日期格式:dd-mon-yy;
例2:练习add_months函数
解:在当前系统时间基础上加1个月:
例3:练习last_day函数
解:last_day(sysdate)即为当前系统时间所在月的最后一天,比如例1得到当前系统时间为06-4月-16,那么所在月份为4月,最后一天为30日,即30-4月-16。
例4:查看当前系统所在月的下个月的最后一天。
解:
例5:练习next_day函数
解:
当前系统时间是16年4月6日,那么next_day(sysdate,5)计算的是16年4月6日所在星期的第5天的日期,所在星期默认从周日(16年4月3日)开始算第1天,则第五天是周四,也就是16年4月7日。
例5:练习moths_between函数
解:计算月份之间的差值
例6:练习round函数
解:
【round函数说明】
(1)round(sysdate,’yyyy’)中的yyyy是按照“年”开始取整;
(2)round如果按照“年”来取整,那么对于1-6月的“四舍”,7-12月的“五入”,比如16年6月,round取整就是16年1月,如果16年9月,round取整就是17年1月;
(3)round如果按照“月”来取整,那么对于1-15日的“四舍”,16-31日的“五入”,比如16年6月15日,round取整就是16年6月1日,如果16年6月30日,round取整就是16年7月1日。
例7:练习trunc函数
解:
【trunc函数说明】
(1)trunc(sysdate,’yyyy’)中的yyyy是按照“年”开始截断;
(2)trunc如果按照“年”来截断,那么直接将“月”和“日”全部切掉,改成1月1日,没有“四舍五入”一说,直接切。比如16年6月1日,trunc截断就是16年1月1日;
(3)trunc如果按照“月”来截断,那么直接将“日”切掉,改成1日,没有“四舍五入”一说,直接切。比如16年6月15日,trunc截断就是16年6月1日。
三、单行函数之转换函数
在写SQL语句的时候,可能希望一个值从一种数据类型转换为另一种
数据类型,我们就可以用Oracle中的转换函数来实现,这样子可以避免编写程序实现,进一步提高SQL语句的性能和效率。
1.bin_to_num(x)——将x转换为一个二进制数;
2.chartorowid(x)——将x转换为rowid类型,rowid长度为18位;
3.rowidtochar(x)——将rowid x转换为一个varchar2类型的字符;
4.rowidtonchar(x)——将rowid x转换为一个nvarchar2类型的字符;
5.to_char(x[, format])——将x转换为一个varchar2字符串,format为
可选参数,用来指定x的格式;
6.to_date(x[, format])——将x转换为一个DATE。format为可选参数,用来指定x的格式;
7.to_number(x[,format])——将x转换为一个number。format为可选参数,用来指定x的格式。
例8:练习to_char函数。
解:
注意上图中的命令。
例9:练习to_date函数
解:如果现在有一个日期表,格式固定,那么insertinto语句在插入数据时候可能出现错误,这时候就需要to_date函数格式化日期,然后才能正确插入日期数据。
报错原因是与系统默认格式不匹配。如果加上自定义格式,如下:
或者就按照系统默认日期格式插入数据,如下: