微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle数据基础(一)

一. Oracle字符串操作

字符串类型

1. CHAR和VARCHAR2类型

表示字符串数据类型,用来在表中存放字符串信息;

CHAR存放定长字符,即存不满补空格(浪费空间,节省时间);VARCHAR2存放变长字符,存多少占用多少(浪费时间,节省空间);

按照字符的自然顺序排序。


2. CHAR和VARCHAR2的存储编码

认单位是字节,可指定为字符

— CHAR(10),等价于CHAR(10 BYTE)

— 指定单位为字符:CHAR(10 CHAR),20个字节

— VARCHAR2(10),等价于VARCHAR2(10 BYTE)

— 指定单位为字符:VARCHAR2(10 CHAR),20个字节

每个英文字符占用一个字节,每个中文字符按编码不同,占用2-4个字节

— ZHS16GBK:2个字节

— UTF-8:2-4个字节

3. CHAR和VARCHAR2的最大长度

CHAR最大取值为2000字节,最多保存2000个英文字

VARCHAR2最大取值为4000字节

CHAR可以不指定长度,认为1,VARCHAR2必须指定长度


4. LONG和CLOB类型

LONG:VARCHAR2加长版,存储变长字符串,最多达2GB的字符串数据

LONG有诸多限制:每个表只能有一个LONG类型列;不能作为主键;不能建立索引;不能出现在查询条件中

CLOB:存储定长或变长字符串,最多达4GB的字符串数据

ORACLE建议开发中使用CLOB替代LONG类型


字符串函数

1. CONCAT和“||”

CONCAT(char1,char2);

— 返回两个字符串连接后的结果,两个参数char1,char2是要连接的两个字符串

等价操作:连接操作符“||”

如过char1和char2任何一个为NULL,相当于连接了一个空格

“||”在数据库中是连接字符串,相当于java中的“+”,注意和java“||”区分

eg:

java中:”hello” + “world” ==> “helloworld"

DB中:’hello’||’world’ ==> ‘hello world'

oracle中:CONCAT(‘hello’,’world’) ==> ‘hello world'


2. FROM DUAL(虚表)

DUAL:虚表,没有这么一个表,只为了满足SELECT的语法要求。

— 我们常用虚表来测试表达式的结果。

— 在数据库中,我们想测试某个表达式的结果只能使用SELECT语句来实现

— 什么时候使用虚表:当SELECT语句中没有任何表中的字段参与时

— eg: 假设表emp中name和sal两个字段存储的内容分别是名字和薪资

SELECT name||’:’||sal FROM emp

则所得结果为:boss:5000


3. LENGTH

LENGTH(char):用于返回字符串的长度

如果字符类型是VARCHAR2,返回字符的实际长度,如果字符类型是CHAR,长度还要包括后补的空格

eg: SELECT name,LENGTH(name) FROM emp;

所得结果:boss 4(name为CHAR)


4. UPPER,LOWER和INITCAP

大小写转换函数,用来转换字符的大小写

UPPER(char)用于将字符转换为大写形式

LOWER(char)用于将字符转换为小写形式

INITCAP(char)用于将字符串中每个单词的首字符大写,其它字符小写,单词之间用空格和非字母字符分隔

如果熟人的参数是NULL值,仁返回NULL值


5. TRIM,LTRIM,RTRIM

作用:截去子串

语法形式:

— TRIM(c2 FROM c1)从c1的前后截去c2

— LTRIM(c1[,c2])从c1的左边(Left)截去c2

— RTRIM(c1[,c2])从c1的右边(Right)截去c2

如果没有c2就去除空格

eg:SELECT TRIM(‘e’ from ‘eeeeliteeee’) FROM DUAL;

参数中from前面只能是单一字符

若没有from以及前面的字符,则是去除空白

eg:SELECT LTRIM(‘eeeeliteeee’,’e’) FROM DUAL;

SELECT RTRIM(‘eeeliteee’,’e’) FROM DUAL;

不指定第二个参数,认是去除空白


6. LPAD,RPAD

补位函数,用于在字符串char1的左端或右端用char2补足到n位,char2可重复多次

— LPAD(char1,n,char2)左补位函数

— RPAD(char1,char2)右补位函数

在emp表中使用左补位,将sal用$补齐20位

eg:SELECT name,LPAD(sal,20,‘$’) as “salary” FROM emp;

作用:要求显示20个字符,若sal的值不足长度,则补充若干个’$’,以达到20个字符

eg:SELECT RPAD(‘aaaaAAAAA’) FROM DUAL;

得到结果为aaaaA


7. SUBSTR

SUBSTR(char,[m[,n]])

— 用于获取字符串的子串,返回char中从m位开始取n个字符

如果m=0,则从首字符开始,如果m取负数,则从尾部开始

如果没有设置n,或者n的长度超过了char的长度,则取到字符串末尾为止

字符串的首位计数从1开始


8. INSTR

INSTR(char1,char2[,n [,m]]);

返回子串char2在原字符串char1中的位置

参数:

— 从n的位置开始搜索,没有指定n,从第一个字符开始搜索

— m用于指定子串的第m次出现次数,如果不指定取值1

— 如果在char1中没有找到子串char2,返回0


二. Oracle数值操作

数值类型

1. NUMBER(P)表示整数

完整语法:NUMBER(precision,scale)

— 如果没有设置scale,则认取值0,即NUMBER(p)表示整数

— P表示数字的总位数,取值为1-38

用来在表中存放如编码,年龄,次数等用整数记录的数据


2. NUMBER(P,S)表示浮点数

NUMBER(precision,sans;">

— precision:NUMBER可以存储的最大数字长度(不包括左右两边的0)

— scale:在小数点右边的最大数字长度(包括左侧0)

指定了s但是没有指定p,则p认为38

经常用于表中存放金额,成绩等有小数的数据。

NUMBER的变种数据类型:内部实现是NUMBER,可以将其理解为NUMBER的别名,目的是多种数据库及编程语言兼容

— NUMERIC(p,s):完全映射至NUMBER(p,s)

— DECIMAL(p,s)或DEC(p,s)类型

— INTEGER或INT:完全映射至NUMBER(38)类型

— SMALLINT:完全映射至NUMBER(38)类型

— FLOAT(b):映射至NUMBER类型

— DOUBLE PRECISION:映射至NUMBER类型

— REAL:映射至NUMBER类型


数值函数

1. ROUND

ROUND(n[,m]):用于四舍五入

— 参数中的n可以是任何数字,指要被处理的数字

— m必须是整数

— m取正数则四舍五入到小数点后第m位

— m取0值则四舍五入到整数位

— m取负数,则四舍五入到小数点前m位

— m缺省,认是0

eg:SELECT ROUND(45.678,-1) FROM DUAL; —50


2. Trunc

Trunc(n[,m]):用于截取

— n和m的定义和ROUND(n[,m])相同,不同的是功能上按照截取的方式处理数字n

eg:SELECT Trunc(45.678,-1) FROM DUAL; —40


3. MOD

MOD(m,n):返回m除以n后的余数

—n为0则直接返回m


4. CEIL和FLOOR

CEIL(n),FLOOR(n)这两个函数一个是取大于或等于n的最小整数值,另一个是取小于或等于n的最大整数值

eg:SELECT CEIL(45.678) FROM DUAL; —46

SELECT FLOOR(45.678) FROM DUAL; —45


三. Oracle日期操作

日期类型

1. DATE

ORACLE中最常用的日期类型,用来保存日期和时间

DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日

DATE类型在数据库中的存储固定为7个字节,格式为:

— 第一个字节:世纪+100

— 第二个字节:年

— 第三个字节:月

— 第四个字节:天

— 第五个字节:小时+1

— 第六个字节:分+1

— 第七个字节:秒+1


2. TIMESTAMP

ORACLE常用的日期类型

与DATE的区别是不仅可以保存日期和时间,还能保存小数秒,最高精度可以到ns(纳秒)

数据库内部用7或者11字节存储,精度为0,用7字节存储,与DATE功能相同,精度大于0则用11字节存储

格式为:

— 第1字节-第7字节:和DATE相同

— 第8-11字节:纳秒,采用4个字节存储,内部运算类型为整型


日期关键字

1. SYSDATE

其本质是一个ORACLE的内部函数,返回当前的系统时间,精确到秒

显示格式是DD-MON-RR


2. SYSTIMESTAMP

内部函数,返回当前系统日期和时间,精确到毫秒


日期转换函数

1. TO_DATE

TO_DATE(char[,fmt[,nlsparams]]):将字符串按照定制格式转换为日期类型

— char:要转换的字符串

— fmt:格式

— nlsparams:指定日期语言

— 常用的日期格式见表


YY 2位数字的年份
YYYY 4位数字的年份
MM 2位数字的月份
MON 简拼的月份
MONTH 全拼的月份
DD 2位数字的天
DY 周几的缩写
DAY 周几的全拼
HH24 24小时制的小时
HH12 12小时制的小时
MI 显示分钟

SS

显示


2. TO_CHAR

将其它类型的书籍转换为字符类型

TO_CHAR(date[,nlsparams]]):将日期类型数据date按照fmt的格式输出字符串。nlsparams用于指定日期语言

需要注意的是:在日期格式字符串中,出现的非关键字符或符号的其它字符时,需要使用双引号

eg:SELECT TO_CHAR(SYSDATE,“yyyy”year”mm”month”dd”day”hh:mi:ss”) FROM DUAL;

两个日期可以进行减法操作,差为相差的天数


日期常用函数

1. LAST_DAY

LAST_DAY(date):返回日期date所在月的最后一天

在按照自然月计算某些业务逻辑,或者安排月末周期性活动时很有用处

eg:SELECT LAST_DAY(SYSDATE) FROM DUAL; —30-9月-17

SELECT LAST_DAY(’20-2月-09’) FROM DUAL; —28-2月-09


2. ADD_MONTHS

ADD_MONTHS(date,i):返回日期date加上i个月后的日期值

— 参数i可以是任何数字,大部分时候取正值整数

— 如果i是小数,将会被截取整数后再参与运算

— 如果i负数,则获得的是减去i个月后的日期值

eg:计算职员入职20周年纪念日

SELECT name,ADD_MONTHS(hiredate,20 * 12) as ‘20周年’ FROM emp;


3. MONTHS_BETWEEN

MONTHS_BETWEEN(date1,date2):计算date1和date2两个日期值之间间隔了多少个月

实际运算是date1-date2,如果date2时间比date1晚,会得到负值

除非两个日期间隔是整数月,否则会得到带小数位的结果。

— 此时可以使用FLOOR得到整月

eg:SELECT name,FLOOR(MONTHS_BETWEEN(SYSDATE,hiredate)) FROM emp;


4. NEXT_DAY

NEXT_DAY(date,char):返回date日期数据的下一个周几,周几是由参数char来决定的

中文环境下,直接使用“星期三”这种形式,英文环境下,需要使用“WednESDAY”这种英文的周几。位避免麻烦,可以直接使用1-7表示周日-周六

NEXT_DAY不是明天

SELECT NEXT_DAY(SYSDATE,3) FROM DUAL; —离现在最近的周2(不包含今天)


5. LEAST,GREATEST

GREAGEST(expr1[,expr2[,expr3]]...)

LEAST(expr1[,sans;">

也被称作比较函数,可以有多个参数值,返回结果是参数列表中最大或最小的值

参数类型必须一致

在比较之前,在参数列表中第二个以后的参数会被隐含的转换为第一个参数的数据类型,所以如果可以转换,则继续比较,如果不能转换将会报错。


6. EXTRACT

EXTRACT(date FROM datetime):从参数date time中提取参数date指定的数据,比如提取年,月,日

eg:SELECT EXTRACT(HOUR FROM TIMESTAMP ‘2008-01-01 10:10:10’) FROM DUAL;


四. 空值操作

NULL的含义

数据库里的重要概念:NULL,即空值

有时表中的某些字段值,数据未知或暂时不存在,取值NULL

任何数据类型均可取值NULL

NULL的操作

1. 插入NULL值和更新成NULL时只有在非空约束时才可操作

查询条件:WHERE name IS NULL/ WHERE name IS NOT NULL

任何数据和NULL相加都是NULL


2. 非空约束

非空(NOT NULL)约束用于确保字段值不为空

认情况下,任何列都允许有空值

当某个字段被设置了非空约束条件,这个字段中必须存在有效值。


空值函数

1. NVL

NVL(expr1,expr2):将NULL转变为非NULL值

— 如果expr1为NULL,则取值expr2,expr2是实际值

— expr1和expr2可以是任何数据类型,但两个参数的数据类型必须是一致的

2. NVL2

NVL2(expr1,expr2,expr3):和NULL函数功能类似,都是将NULL转变为实际值

NVL2用来判断expr1是否为NULL,如果不是NULL,返回expr2,如果是NULL,返回expr3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Java Oracle 结果集是Java语言中处理数据库查询结果的一种方式。通常情况下,Java程序会通过JDBC连接Oracle数据库并执行一条查询语句,返回一个ResultSet结果集。ResultSet是一个行集,包含了查询语句的返回结果。在
Java AES和Oracle AES是现代加密技术中最常使用的两种AES加密。在计算机通信领域,AES加密算法是一种十分重要的保密技术,被广泛应用于银行、保险、互联网电子支付等重要场合。
Java是一种广泛应用的编程语言,具备可靠性、安全性、跨平台性等优势,被广泛应用于企业级应用开发。而Oracle11g是一个强大的关系型数据库,由于其优秀的可靠性、安全性和扩展性,已经被广泛应用于企业级应用中。Jav
随着移动互联网的发展,抽奖活动成为了营销活动中不可或缺的组成部分。为了满足移动端用户的需求,我们可以使用jQuery开发移动端大转盘抽奖活动。
Java和Oracle都是在计算机领域应用非常广泛的技术,他们经常被用来搭建高效的软件系统。Java是一种面向对象的编程语言,而Oracle是一种关系型数据库管理系统。Java 和Oracle在应用中的联系非常紧密,它们能够通过相互
Java 是一门非常流行的编程语言,它可以运行于各种操作系统上,而 Oracle 是一个广泛使用的数据库软件。在 Java 对 Oracle 进行操作时,需要使用 Oracle 参数来确保程序正确工作。本文将从 Oracle 参数的定义、分类
随着电子竞技的兴起,越来越多的人开始慕名玩起了王者荣耀。而对于Python爱好者来说,这款游戏也有着很大的吸引力。因为Python可以帮助我们获取并处理游戏数据,从而获得更好的游戏体验。
Java与Oracle在数据处理方面都有着非常重要的地位,而在Java和Oracle的结合中,Integer类型则起到了不可替代的作用。Integer类型是Java中一个非常常用的数据类型,它可以表示范围在-2147483648到2147483647之间的整数
如今,JavaScript已经成为了web开发的必备技能之一,而IE浏览器也是众多开发者最常用的浏览器,那么,如何启用IE浏览器的JavaScript呢?
Java与Oracle是当今软件行业中广泛使用的两个技术。而SP(Stored Procedure)是Oracle数据库中存储过程的组件,可以在Java中调用Oracle数据库中的SP。在开发过程中,Java和Oracle的组合可以方便处理大规模的数据和建