oracle-单行函数

Posted Piper.Xiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle-单行函数相关的知识,希望对你有一定的参考价值。

oracle函数分为单行函数和多行函数,下面的图能很清楚的说明单行函数和多行函数:

单行函数是指接收一个输入,返回一个输出包括 字符函数、数值函数、日期函数、转换函数和通用函数

 

多行函数和单行函数相比,oracle提供了丰富的基于组的,多行的函数。这些函数能在select或select的having子句中使用,当用于select子串时常常都和GROUP BY一起使用。多行函数分为接收多个输入,返回一个输出

一、单行函数

1、字符函数

 

1)、大小写控制函数

/*转小写*/
select lower(\'HELLOWORD\') FROM DUAL;--helloword
/*转大写*/
select upper(\'helloword\') FROM DUAL;--HELLOWORD
/*首字母大学*/
select initcap(\'hELLOword\') FROM DUAL;--Helloword

2)、字符控制函数

/* 1、连接两个字符*/
select concat(\'str1\',\'str2\') from dual;--str1str2

/* 2、字符串截取,param1:要截取的字符串;param2:开始截取位置;param3:截取的个数*/
select substr(\'helloword\',1,5) from dual;--hello

/* 3、判断字符串的长度*/
select length(\'holleworld\') from dual;--10

/* 4、某一个字符串在另一个字符串中首次出现的位置,如果没有返回0*/
select instr(\'helloword\',\'dd\') from dual;--0
select instr(\'helloword\',\'hello\') from dual;--1

/* 5、左对齐
param1:填充的字符串
param2:填充之后的字符串长度,也就是该函数返回的字符串长度,如果这个数量比原字符串的长度要短,
       lpad函数将会把字符串截取成从左到右的n个字符
param3:填充字符串,是个可选参数,这个字符串是要粘贴到string的左边,如果这个参数未写,
       lpad函数将会在string的左边粘贴空格
*/
select lpad(\'hello\',10,\'#\') from dual;--#####hello

/* 6、右对齐
参数和左对齐的含义一样*/
select rpad(\'hello\',10,\'#\') from dual;--hello#####

/* 7、将一个字符从另一个字符中移除*/
select trim(\'H\' from \'HELLOWORLD\') from dual;--ELLOWORLD
select trim(\'A\' from \'HELLOWORLD\') from dual;--HELLOWORLD
select trim(\'H\' from \'HELLOHWORLDH\') from dual;--ELLOHWORLD

/* 8、替换函数
replace(param1,param2,param3),将param1中的param2替换成param3,将所有的param2都替换成param3
*/
SELECT REPLACE(\'helloword\',\'o\',\'O\') FROM DUAL;--hellOwOrd

2、数字函数

/* 1、四舍五入*/
select round(123.456),round(123.556),round(123.456,2),round(435.45,-2),round(435.45,-5),round(435.45,5) from dual;
--123   124    123.46    400    0     435.45

/* 2、截断
param1为必要参数,是输入的一个日期值
param2参数可忽略,是日期格式
*/
/*1>、截取时间到年时,yyyy也可用year替换*/
select trunc(sysdate,\'yyyy\') from dual;  --2018/1/1

/*2>、截取时间到月时*/
select trunc(sysdate,\'mm\') from dual;--2018/4/1

/*3>、截取时间到日时*/
select trunc(sysdate,\'dd\') from dual;--2018/4/28

/*4>、截取时间到小时时*/
select trunc(sysdate,\'hh\') from dual;--2018/4/28 9:00:00

/*5>、截取时间到分钟时*/
select trunc(sysdate,\'mi\') from dual;--2018/4/28 9:48:00

/* 3、求余
 mod(nExp1,nExp2),即是两个数值表达式作除法运算后的余数
*/
select mod(10,3) from dual;--1

3、日期函数

1)、在日期上加上一个数或者减上一个数仍为日期;

2)、两个日期相减返回之间相差的天数,日期不允许做加法(没意义);

3)、用数字除24向日期中加上或者减上天数;

/*日期函数*/
select sysdate,sysdate+1,sysdate-3 from dual;
--2018/4/28 9:58:37
--2018/4/29 9:58:37
--2018/4/25 9:58:37

/*判断两个日志之间相差的月份*/
select months_between(sysdate,sysdate-35) from dual;--1.12903225806452

/*向指定的日期中加上若干个月*/
select add_months(sysdate,2),add_months(sysdate,-3) from dual;
--2018/6/28 10:03:05
--2018/1/28 10:03:05

/*当前日期开始得到到未来星期数的日期*/
select sysdate,next_day(sysdate,\'星期日\'),next_day(sysdate,\'星期二\'),next_day(sysdate,\'星期六\') from dual;
--2018/4/28 10:07:30
--2018/4/29 10:07:30
--2018/5/1 10:07:30
--2018/5/1 10:07:30

/*获取本月的最后一天*/
select last_day(sysdate) from dual;

/*其它日期处理*/
select round(sysdate,\'month\'),round(sysdate,\'mm\') from dual;--\'month\'和\'mm\'一样
--2018/5/1     2018/5/1
select round(sysdate,\'year\') from dual;--2018/1/1
select sysdate,trunc(sysdate,\'year\'),trunc(sysdate,\'month\') from dual;
--2018/4/28 10:12:26 
--2018/1/1
--2018/4/1

4、转换函数

分为隐式转换和显示转换,如图:

 

隐式类型转换:oracle自动完成下列的转换

源数据类型 目标数据类型
varchar2 or char number
varchar2 or char date
number varchar2
date varchar2

 

 

 

 

date  <======>varchar2<======>number

例如:

select \'12\'+2 from dual;--14
select sysdate+2 from dual;--2018/4/30 10:19:20
select 123,123,123.24+2 from dual;---123   123  125.24

显示类型转换:

/*char和date之间的转换*/
SELECT TO_CHAR(SYSDATE,\'YYYY-MM-DD\') FROM DUAL;--2018-04-28
SELECT TO_DATE(\'2018-04-28\',\'YYYY-MM-DD\') FROM DUAL;--2018/4/28
SELECT TO_DATE(\'2018-04-28\',\'YYYY/MM/DD\') FROM DUAL;--2018/4/28
SELECT TO_char(sysdate,\'YYYY"年"MM"月"DD"日"\') FROM DUAL;--2018年04月28日

/*char和number之间的转换*/
SELECT TO_CHAR(1234567.89,\'999,999,999.99\') FROM DUAL;--1,234,567.89
SELECT TO_CHAR(1234567.89,\'000,000,99.99\') FROM DUAL;--012,345,67.89
SELECT TO_CHAR(1234567.89,\'000,000,999.99\') FROM DUAL;-- 001,234,567.89
SELECT TO_CHAR(1234567.89,\'$00,000,999.99\') FROM DUAL;-- $01,234,567.89
/*(本地的钱符号)*/
SELECT TO_CHAR(1234567.89,\'L00,000,999.99\') FROM DUAL;--¥01,234,567.89

to_char()函数对数字的转换过程中,下面是to_char()函数经常用到的几种格式:

9 数字
0
$ 美元
L 本地货币符号(用local理解)
. 小数点
, 千位符号

 

 

 

 

 

 

to_number(\'¥001,234,567,89\',\'L000,000,99.99\')可以做运算,我想如果你在美国,就要将¥换成$了;

 

以上是关于oracle-单行函数的主要内容,如果未能解决你的问题,请参考以下文章

oracle常用单行函数

Oracle系列:(12)多行函数

Oracle常用单行函数(原创)

oracle-单行函数

JavaScript单行代码,也就是代码片段

Oracle笔记 单行函数