设为首页 收藏本站
查看: 1025|回复: 0

[经验分享] oracle简单学习总结(三)——函数

[复制链接]

尚未签到

发表于 2016-7-28 07:14:59 | 显示全部楼层 |阅读模式
一、数值型函数
函 数功 能实 例结 果
abs求绝对值函数abs(−5)5
sqrt求平方根函数sqrt(2)1.41421356
power求幂函数power(2,3)8
cos求余弦三角函数(用弧度)cos(3.14159)−1
mod求除法余数mod(1600, 300)100
ceil求大于等于某数的最小整数ceil(2.35)3
floor求小于等于某数的最大整数floor(2.35)2
round按指定精度对十进制数四舍五入round(45.923, 1)
round(45.923, 0)
round(45.923, −1)
45.9
46
50
trunc按指定精度截断十进制数trunc(45.923, 1)
trunc(45.923)
trunc(45.923, −1)
45.9
45
40
二、oracle中的dual表
  2.1 理解

  1、DUAL是 SYS用户的一个TABLE.
  2、Dual是Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的Select语句块中,用来构成select的语法规则,oracle保证dual里面永远只有一条记录。
  3、DUAL就是个一行一列的表,该表和系统中的其他表一样,一样可以执行插入、更新、删除操作,还可以执行drop操作。但是不要去执行drop表的操作,否则会使系统不能用,数据库起不了,会报Database startup crashes with ORA-1092错误。
  2.2 DUAL 能做什么
  1、查找当天日期
SQL> select sysdate from dual;

  2、查找当前日期的当月第一天
SQL> select trunc(sysdate,’MONTH’) from dual;

  3、查找当前日期的当月最后一天
SQL> select trunc(last_day(sysdate)) from dual;

  4、查看当前用户,可以在SQL Plus中执行下面语句
SQL> select user from dual;

  5、获得当前系统时间
SQL> select to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’) from dual;

  6、获得主机名
SQL>
select SYS_CONTEXT(‘USERENV’,'TERMINAL’) from dual;

  7、获得当前locale
SQL>
select SYS_CONTEXT(‘USERENV’,'language’) from dual;

  8、获得一个随机数
SQL>
select dbms_random.random from dual;

  9、查看当前日期、时间
SQL> select sysdate from dual;

  10、获得序列your_sequence的下一个值
SQL>
select your_sequence.nextval from dual;

  11、获得序列your_sequence的当前值
SQL>
select your_sequence.currval from dual;

  12、可以用做计算器

  参考网址:http://yesican.blog.iyunv.com/700694/269814

   http://www.itfarmer.com.cn/plsql/1093.html
三、字符型函数
函数名称
功 能实 例结 果
ascii获得字符的ASCII 码Ascii('A')65
chr返回与ASCII 码相应的字符Chr(65)A
lower将字符串转换成小写lower ('SQL Course')sql course
upper将字符串转换成大写upper('SQL Course')SQL COURSE
initcap将字符串转换成每个单词以大写开头initcap('SQL course')Sql Course
concat连接两个字符串concat('SQL', ' Course')SQL Course
substr给出起始位置和长度,返回子字符串substr('String',1,3)Str
length求字符串的长度length('Wellcom')7
instr给出起始位置和出现的次数,求子字符串在字符串中出现的位置instr('String', 'r',1,1)3
lpad用字符填充字符串左侧到指定长度lpad('Hi',10,'-')--------Hi
rpad用字符填充字符串右侧到指定长度rpad('Hi',10,'-')Hi--------
trim在一个字符串中去除另一个字符串trim('S' FROM 'SSMITH')MITH
replace用一个字符串替换另一个字符串中的子字符串replace('ABC', 'B', 'D')ADC
四、日期型函数
1、Oracle使用内部数字格式来保存时间和日期,包括世纪、年、月、日、小时、分、秒。缺省日期格式为DD-MON-YY,如“08-05月-03”代表2003年5月8日。
2、SYSDATE是返回系统日期和时间的虚列函数。
函 数功 能实 例结 果
months_between返回两个日期间的月份months_between ('04-11 月-05','11-1 月
-01')
57.7741935
add_months返回把月份数加到日期上的新日期add_months('06-2 月-03',1)
add_months('06-2 月-03',-1)
06-3 月-03
06-1 月-03
next_day返回指定日期后的星期对应的新日期next_day('06-2 月-03','星期一')10-2 月-03
last_day返回指定日期所在的月的最后一天last_day('06-2 月-03')28-2月-03
round按指定格式对日期进行四舍五入round(to_date('13-2 月-03'),'YEAR')
round(to_date('13-2 月-03'),'MONTH')
round(to_date('13-2 月-03'),'DAY')
01-1 月-03
01-2 月-03
  16-2 月-03
  (按周四舍五入)
trunc对日期按指定方式进行截断trunc(to_date('06-2 月-03'),'YEAR')
trunc(to_date('06-2 月-03'),'MONTH')
trunc(to_date('06-2 月-03'),'DAY')
01-1 月-03
01-2 月-03
02-2 月-03
  (按周截断
五、日期转换格式字符
  

代 码代表的格式例 子
AM、PM上午、下午08 AM
D数字表示的星期(1~7)1,2,3,4,5,6,7
DD数字表示月中的日期(1~31)1,2,3,…,31
MM两位数的月份01,02,…,12
Y、YY、YYY、YYYY年份的后几位3,03,003,2003
RR解决Y2K 问题的年度转换
DY简写的星期名MON,TUE,FRI,…
DAY全拼的星期名MONDAY,TUESDAY,…
MON简写的月份名JAN,FEB,MAR,…
MONTH全拼的月份名JANUARY,FEBRUARY,…
HH、HH1212小时制的小时(1~12)1,2,3,…,12
HH2424 小时制的小时(0~23)0,1,2,…,23
MI分(0~59)0,1,2,…,59
SS秒(0~59)0,1,2,…,59
,./-;:原样显示的标点符号
'TEXT'引号中的文本原样显示TE
  sql: SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS AM DY') FROM dual;
   DSC0000.jpg

  sql:SELECT TO_CHAR(sysdate,'YYYY" 年"MM" 月"DD" 日"')FROM dual;

   DSC0001.jpg

六、转换函数
  
函 数功 能实 例结 果
To_char转换成字符串类型To_char(1234.5, '$9999.9')$1234.5
To_date转换成日期类型To_date('1980-01-01', 'yyyy-mm-dd')01-1 月-80
To_number转换成数值类型To_number('1234.5')1234.5
说明:Oracle可以自动根据具体情况进行如下的转换:
(1) 字符串到数值。(2) 字符串到日期。(3) 数值到字符串。(4)日期到字符串。

sql:SELECT SYSDATE,to_char(SYSDATE,'YYyysp') FROM dual;
DSC0002.jpg
七、数值转换
  
代 码代表的格式例 子
9代表一位数字,如果是正数,前面是空格,如果是负数,前面是-号9999
0代表一位数字,在相应的位置上如果没有数字则出现00000
,逗号,用作组分隔符99,999
.小数点,分隔整数和小数999.9
$$货币符号$999.9
L本地货币符号L999.99
FM去掉前后的空格FM999.99
EEEE科学计数法9.9EEEE
S负数符号−放在开头S999.9
sql:SELECT TO_CHAR(123.45,'0000.00'), TO_CHAR(12345,'L9.9EEEE'), TO_CHAR(12345,'L9,9999') ,TO_CHAR(12345,'L9,9') FROM dual;
DSC0003.jpg
说明:如果实际位数超过指定位数,则会填充为#号
八、其他常用函数

函 数功 能实 例结 果
nvl空值转换函数nvl(null, '空')
decode实现分支功能decode(1,1, '男', 2, '女')
userenv返回环境信息userenv('LANGUAGE')SIMPLIFIEDCHINESE_CHINA.ZHS16GBK
greatest返回参数的最大值greatest(20,35,18,9)35
least返回参数的最小值least(20,35,18,9)9
  说明:字符串的比较原则是,依次转换为ASCII码,先比较第一位,如果相同,则继续比较第二位,依此类推,直到出现大小关系

  nvl例:
nvl(comm, 0):用0代替空的Comm值。
nvl(hiredate, '01-1月-97'):用1997年1月1日代替空的雇佣日期。
  nvl(job, '无'):用“无”代替空的职务。

  decode例:
  sql:SELECT name,age,decode(age, '26', '年龄26','12','年龄12','年龄不大于10') FROM userinfor;

   DSC0004.jpg

  说明:如果age字段的内容为26”则返回“年龄26”,如果是“12”则返回“年龄12”。如果不是“ 26” 、“ 12” 之一, 则返回“年龄不大于10”

  userenv例:
函数userenv返回用户环境信息字符串,该函数只有一个字符串类型的参数,参数的内容为如下之一的字符串,可以不区分大小写:
* ISDBA:判断会话用户的角色是否为SYSDBA,是则返回TRUE。
* INSTANCE:返回会话连接的INSTANCE标识符。
* LANGUAGE:返回语言、地区、数据库字符集信息。
* LANG:返回会话语言的ISO简称。
* TERMINAL:返回正在会话的终端或计算机的标识符。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-250326-1-1.html 上篇帖子: oracle海量数据加快创建索引速度 下篇帖子: Oracle 的存储过程和定时任务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表