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

[经验分享] Oracle数据基础(一)

[复制链接]

尚未签到

发表于 2018-9-6 06:04:57 | 显示全部楼层 |阅读模式
  一. 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, n, 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, scale)
  — precision:NUMBER可以存储的最大数字长度(不包括左右两边的0)
  — scale:在小数点右边的最大数字长度(包括左侧0)
  指定了s但是没有指定p,则p默认为38
  经常用于表中存放金额,成绩等有小数的数据。
  NUMBER的变种数据类型:内部实现是NUMBER,可以将其理解为NUMBER的别名,目的是多种数据库及编程语言兼容
  — NUMERIC(p, s):完全映射至NUMBER(p, s)
  — DECIMAL(p, s)或DEC(p, s):完全映射至NUMBER(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:指定日期语言
  — 常用的日期格式见表
YY2位数字的年份YYYY4位数字的年份MM2位数字的月份MON简拼的月份MONTH全拼的月份DD2位数字的天DY周几的缩写DAY周几的全拼HH2424小时制的小时HH1212小时制的小时MI显示分钟  SS
显示秒  2. TO_CHAR
  将其它类型的书籍转换为字符类型
  TO_CHAR(date[, fmt[, 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[, expr2[,expr3]]...)
  也被称作比较函数,可以有多个参数值,返回结果是参数列表中最大或最小的值
  参数类型必须一致
  在比较之前,在参数列表中第二个以后的参数会被隐含的转换为第一个参数的数据类型,所以如果可以转换,则继续比较,如果不能转换将会报错。
  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


运维网声明 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.iyunv.com/thread-563691-1-1.html 上篇帖子: Oracle下表空间收缩 下篇帖子: Oracle数据基础(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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