03数据库-函数

20200225

一、单行函数

1、字符函数

大小写控制函数:lower(),upper(),initcap()

select lower('HELLO') from dual;    把临时表中的字符HELLO转换成小写

lower(),upper(),initcap() 改变的是每个单词

select upper('欢迎welcome to 中国china') from dual;

2、字符控制函数

concat()连接函数

select concat(ename,job) from emp;

select ename || job from emp;

substr()截取函数

select sustr('hello,world',1,5) form dual;  从hello,world字符串的第一位开始截取,截取长度为5,返回hello

length() 字符长度函数

select length('hello,world') form dual;  读取字符串的长度

lpad/rpad 字符左/右填充函数

select empno,lpad(ename,10,'*') from emp; 位数不够时,执行截取功能

trim()首尾截断函数

select trim(' aa bb ') from dual; 去除首尾的空格,中间空格保留

select ltrim('  aa bb ') from dual; 去除首(左边开始)的空格(此写法只可去掉空格),其余空格保留

trim(leading|trailing|both) 去掉前面|后面|前后

select ename,trim('A' from ename) from emp;去掉ename字符首尾中的A,什么都不写,默认为both

select trim(trailing  'a' from 'aadfaa  aasda') from dual;  返回字符串'aadfaa aasd'

trim中截取的值,只能为一个字符

select ltrim('aabbccddaabb','ab') from dual;  从字符串的左边 去除 a和b的字符,如果没有则返回原字符

instr()查找函数

select ename,instr(ename,'BE') from emp; 查找ename中含有字符BE的,并返回首次出现的位置

select instr('hello world','or',5) from dual;

select instr('hello world','o',1,1) from dual;返回第一次出现第一个o的位置

select instr('hello world','o',1,2) from dual;返回第一次出现第2个o的位置

select ename from emp where ename not like '%R%';   查询姓名中不带有R的员工姓名

select ename from emp where instr(ename,'R')=0;        查询姓名中不带有R的员工姓名

replace()单个字符替换

replace(值,str1,str2) 将值中的str1替换为str2

select ename,replace(ename,'A','a') from emp;将姓名中的A都替换为a

translate()多个字符替换

比replace更占用空间

select ename,translate(ename,'AS','as') from emp; 将姓名中的A替换为a,S替换为s

select ename,translate(ename,'AS','a') from emp; 将姓名中的A替换为a,S去掉

周杰伦→**伦,把最后一个字前面的字都提取出来,然后用*去替换掉

select translate('周杰伦',substr('周杰伦',1,length('周杰伦')-1),'********') from dual;    //**伦

select translate('成龙',substr('成龙',1,length('成龙')-1),'********') from dual;    //**龙

select translate('布莱恩特',substr('布莱恩特',1,length('布莱恩特')-1),'********') from dual;    //***特

3、数字函数

round()四舍五入函数、trunc()截断函数、mod()求余函数

round(45.926,2)=45.93        round(45.926,-1)=50

trunc(45.926,2)=45.92          trunc(45.926,-1)=40

mod(10,3)=1(10/3=3......1)

4、日期函数

sysdate返回当前日期

日期-数字=日期           日期+数字=日期          日期-日期=数字(间隔天数)

months_between返回两个日期间隔的月数

select months_between(sysdate,hiredate) from emp查询每个员工入职的月数

add_months(sysdate,2) 返回当前日期+2月后的日期

next_day(sysdate,'星期一')返回当前日期后的下个星期一的日期,星期几怎么书写需要视当前的字符编码集,中文则输入星期几,英文则输入monday等。

last_day(sysdate) 返回当前日期所在月份的最后一天

select last_day('01-2月-2008'),last_day(sysdate) from dual;   //29-2月 -08      29-2月 -20

5、转换函数

to_number()把其他类型转换成数字,目前已实现自动转换 不需使用函数

select 1+1,'1'+1 from dual;       //2   2

to_date()把其他类型转换成日期

select to_date('2020-02-25','yyyy-mm-dd') from dual;   //25-2月 -20

to_char()把其他类型转换成字符串

select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;   //2020-02-25

把当前日期转换成年月日的中文格式:

select to_char(sysdate,'yyyy"年"mm"月"dd"日"') from dual;   //2020年02月25日

select to_char(sysdate,'yyyy')||'年'||to_number(to_char(sysdate,'mm'))||'月'||to_number(to_char(sysdate,'dd'))||'日' from dual;     //2020年02月25日

注:字符串当中,存在 自定义的字符信息的时候,需要使用双引号 标记那些 直接显示 而不需要额外处理的字符

select to_char(sysdate,'fmyyyy"年"mm"月"dd"日"') from dual;   //2020年2月25日,fm去除前导0

select to_char(sysdate,'fmyyyy-mm-dd hh24:mi:ss am') from dual;   //2020-2-25 16:20:58 下午

select to_char(sysdate,'fmyyyy-mm-dd am hh24:mi') from dual;   //2020-2-25下午16:20:58


美元按照默认格式,会将¥放到数额前面;其他货币是外挂上去的,会按照定义格式写

select ename,to_char(sal,'99,999$'),to_char(sal,'99,999L') from emp; //KOBE $4,000 4,000¥

select ename,to_char(sal,'99g999$'),to_char(sal,'99G999L') from emp;//KOBE $4,000 4,000¥


select add_months(sysdate,1) from dual;         //当前日期+1月

select sysdate,sysdate+7 from dual;         //当前日期+1周

select sysdate,sysdate+1 from dual;         //当前日期+1天

select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd am hh24:mi:ss') from dual;   //当前日期+1时

select to_char(sysdate+1/24/60,'yyyy-mm-dd am hh24:mi:ss') from dual;     //当前日期+1分

select to_char(sysdate+1/24/60/60,'yyyy-mm-dd am hh24:mi:ss') from dual;   //当前日期+1秒

select to_char(sysdate,'yyyy"年"mm"月"dd"日" "第"W"周"') from dual;  //2020年02月25日 第4周

select to_char(sysdate,'d'),to_char(sysdate,'day'),to_char(sysdate,'w') from dual; //d表示今天是本周的第几天(周日是第一天),day表示今天是星期几,w表示这是本月的第几周。


作者:kerwin_chyl

文章链接:https://www.jianshu.com/u/66bf7abdc5a8

本文版权归作者和简书共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342