Oracle-常用函数

1.to_char:将时间或数字转为字符串

to_char处理数字:TO_CHAR(number,'格式')

TO_CHAR(salary,'$99,999.99')
TO_CHAR(200,L99G999D99MI)  //¥200.00

to_char处理日期:TO_CHAR(date,'格式')

TO_CHAR(date,'yyyy-mm-dd hh24:mi:ss')

查询六月份出生的学生:

SELECT sname,birthday
FROM student
WHERE TO_CHAR(birthday,'mm') = 6

2.TO_NUMBER:TO_NUMBER函数()是Oracle中常用的类型转换函数之一,主要是将字符串转换为数值型的格式,与TO_CHAR()函数的作用正好相反。

用法:To_number(varchar2 or char,’format model’)

To_number函数中也有很多预定义的固定格式:

格式值 含义
9 代表一个数字
0 强迫0显示
$ 显示美元符号
L 强制显示一个当地的货币符号
. 显示一个小数点
, 显示一个千位分隔符号
SELECT TO_NUMBER('RMB46.3560','L99999.0000') FROM dual    //46.356

注意:有的时候你会发现,使用了TO_NUMBER()函数并且语法正确,但是Oracle却报“invalid number”的错误,而你在一遍又一遍认认真真检查并确定语句无误之后大呼惊奇,以为TO_NUMBER()函数还有什么可能不知道的用法。其实这很可能是你所查询的数据出现了问题,而非SQL。使用TO_NUMBER()函数的时候,一定要确保所转换字段是可转换为数字的,比如字符串“20151008”是可以转换为数字20151008的,但是字符串“2015-10-08”不可以。如果你的字段中包含了字符串“2015-10-08”,而你还直接使用了TO_NUMBER()函数进行操作的话就会报“invalid number”的错。

3.TO_DATE:转化为时间格式

年:

格式值 含义
yy 显示值:18
yyy 显示值:018
yyyy 显示值:2018

月:

格式值 含义
mm 显示值:11
mon 显示值:11月,若是英文版,显示nov
month 显示值:11月,若是英文版,显示november

日:

格式值 含义
dd 当月第几天 显示值:02
ddd 当年第几天 显示值:02
dy 当周第几天简写 显示值:星期五,若是英文版,显示fri
day 当周第几天简写 显示值:星期五,若是英文版,显示friday

小时:

格式值 含义
hh 12小时进制 显示值:01
hh24 24小时进制 显示值:13

分:

格式值 含义
mi 60进制 显示值:06

秒:

格式值 含义
ss 60进制 显示值:06

其它:

格式值 含义
Q 季度 显示值:2
WW 当年第几周 显示值:52
W 当月第几周 显示值:2
TO_DATE('2018-08-30 08:25:45','yyyy-mm-dd hh24:mi:ss')

4.MOD:求余

MOD(n1,n2),返回n1除以n2的余数,n2=0时返回n1

SELECT MOD(43,5) FROM table  //3

5.ROUND:四舍五入

ROUND(n1,[,n2]),n2大于 0,则四舍五入到指定的小数位,n2等于 0或缺省,则四舍五入到最接近的整数,n2小于 0,则在小数点左侧进行四舍五入

ROUND(3.1415926,2)      //3.14;
ROUND(3.1415926,3)      //3.142;
SELECT ROUND(193,-2) FROM dual;      //200
SELECT ROUND(193,-1) FROM dual;      //190
SELECT ROUND(193,-3) FROM dual;      //0

6.TRUNC:截取

TRUNC(n1,[,n2]),n2大于 0,则向后截取,n2等于 0或缺省,则取整数,n2小于 0,则向前截取

SELECT TRUNC(123.458) FROM dual;    //123
SELECT TRUNC(123.458, 0) FROM dual;  //123
SELECT TRUNC(123.458, 1) FROM dual;  //123.4
SELECT TRUNC(123.458, -1) FROM dual; //120
SELECT TRUNC(123.458, -4) FROM dual;  //0
SELECT TRUNC(123.458, 4) FROM dual;  //123.458
SELECT TRUNC(123) FROM dual;  //123
SELECT TRUNC(123, 1) FROM dual;  //123
SELECT TRUNC(123, -1) FROM dual;  //120

7.TRIM:出去首位空格

TRIM:用来移除掉一个字串中的字头或字尾。删除字符串首尾的空白(可以首尾一起,也可以指定首或尾,取决于控制参数),但会保留字符串内部作为词与词之间分隔的空格

LTRIM(字串):将字串左边的空格移除。

RTRIM(字串): 将字串右边的空格移除。

TRIM(字串): 将字串首尾两端的空格移除,作用等于RTRIM和LTRIM两个函数共同的结果。

ALLTRIM(字串):将字串左右边两边的空格移除。

SELECT RTRIM('    aaa111  bbb  ccc     ') FROM dual;

注意:字符串左右的空格真的可以全部都去掉吗?不见得。如果你的字符串两侧带有全角空格,你就会惊奇的发现,全角空格完全去不掉!包括Java中trim()方法,对于字符串前后的全角空格也是无能为力。那么如何解决呢?

去除字符串左右 / 中指定字符(进阶用法)

去除空格仅仅是这三个函数的“默认行为”,事实上,这三个函数还可以接收其他的参数来完成在指定字符串左右 / 中去除字符。

TRIM( leading | trailing | both string1 FROM string2):从string2中去除左侧 | 右侧 | 左右两侧(默认是both,即左右侧都去掉)的string1字符,注意,string1只能是单个字符。

SELECT TRIM(leading  '  '  FROM  '    aaa  bbb  ccc   ') FROM dual;

LTRIM(string1,string2),RTRIM(string1,string2):从字符串string1左侧(右侧)开始去除与string2字符集合中单个字符匹配的字符,直到在string1中遇上某个字符,该字符不在string2字符集合中。

oracle中的这两个函数中的第二个参数,可以是多个字符组成的“字符集合”,为什么说是“字符集合”而不是“字符串”(虽然严格意义上讲并没有字符集合这个概念),因为在以string2为基础对string1做字符去除的时候,string2并不是作为一个字符串那样的整体来与string1匹配的,而是单个单个字符的匹配。比如string1='abccba',string2='abc',如果string2作为一个整体来匹配,显然不管是用ltrim还是rtrim函数,对string1操作之后返回的结果应该是'cba',但实际上不是,返回的是一个空串!

8.REPLACE:替换

REPLACE(str1,str2,[,str3]):str3替换str1中出现的所有str2,返回新的字符串,如果有某个参数为NULL,此函数返回NULL
该函数可以多次替换,只要str1中还有str2存在,最后都被替换成str3
若str3为空,则删除str2

REPLACE('hello world,'h','H')   //Hello world
REPLACE('abca','a')    //bc

9.SYSDATE:返回数据库所在操作系统上的时间

SELECT SYSDATE,CURRENT_DATE FROM table

10.其他

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

推荐阅读更多精彩内容

  • lpad(str,number1,char) 向左填充,lpad = left + padding, Except...
    把生活写进简记阅读 713评论 0 0
  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,036评论 1 19
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,360评论 0 5
  • 凌晨三点半多醒了一次,后来又睡了,在这一个多小时的睡眠里,我做了一个梦,梦见了爷爷,情景太清晰了,感觉太真切了! ...
    心若芷兰阅读 293评论 1 4
  • 家长会在同学们的窃窃私语中结束了,也就意味着我的高二时光到此为止!紧接着我就将步入魔鬼般的高三生活。想到开学之后,...
    玖琪是魔王呐阅读 429评论 2 2