SQL的数据类型

3.1 四种基本的常用数据类型(表的字段类型)

1、字符型, 2、数值型,3、日期型,4、大对象型

3.1.1 字符型:
    char         固定字符,最长2000个
    varchar2     可变长字符,最长4000个,最小值是1
    nchar/nvarchar2     NCHAR/NVARCHAR2类型的列使用国家字符集
    raw和long raw       固定/可变长度的二进制数据长度 最长2G,可存放多媒体图象声音等。(老类型,逐步淘汰)
    LONG        可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,一个表中最多一个LONG列。(老类型,逐步淘汰)。

3.1.2 数值型:
    number(p,s) 实数类型,以可变长度的内部格式来存储数字。这个内部格式精度可以高达38位。
    int         整数型,number的子类型,范围同上

3.1.3 日期型:

date    日期的普通形式,表示精度只能到秒级。
    timestamp   日期的扩展形式,表示精度可达秒后小数点9位(10亿分之1秒)。
    timestamp with timezone  带时区
    timestamp with local timezone 时区转换成本地日期

系统安装后,默认日期格式是DD-MON-RR, RR和YY都是表示两位年份,但RR是有世纪认知的,它将指定日期的年份和当前年份比较后确定年份是上个世纪还是本世纪(如表)。

当前年份       指定日期     RR格式        YY格式
    ------------------------------------------------------------------------------
    1995          27-OCT-95     1995        1995
    1995           27-OCT-17     2017        1917
    2001          27-OCT-17     2017        2017
    2013          27-OCT-95     1995        2095

3.1.4 LOB型:大对象是10g 引入的,在11g中又重新定义,在一个表的字段里存储大容量数据,所有大对象最大都可能达到4G

CLOB: 用来存储单字节的字符数据,包含在数据库内。
  NCLOB:用来存储多字节的字符数据 
  BLOB:用于存储二进制数据,包含在数据库内。
    BFILE:存储在数据库之外的二进制文件中,这个文件中的数据只能被只读访问。

CLOB,NCLOB,BLOB都是内部的LOB类型,没有LONG只能有一列的限制(考点)。
  
 保存图片或电影使用BLOB最好、如果是小说则使用CLOB最好。
 虽然LONG RAW也可以使用,但LONG是oracle将要废弃的类型,因此建议用LOB。
    当然说将要废弃,但还没有完全废弃,比如oracle 11g里的重要视图dba_views,对于text(视图定义)仍然沿用了LONG类型。
 
Oracle 11g重新设计了大对象,推出SecureFile Lobs的概念,相关的参数是db_securefile,采用SecureFile Lobs的前提条件是11g以上版本,ASSM管理等,符合这些条件的BasicFile Lobs也可以转换成SecureFile Lobs。较之过去的BasicFile Lobs, SecureFile Lobs有几项改进:

1)压缩,2)去重,3)加密。

当create table定义LOB列时,也可以使用LOB_storage_clause指定SecureFile Lobs或BasicFile Lobs
而LOB的数据操作则使用Oracle提供的DBMS_LOB包,通过编写PL/SQL块完成LOB数据的管理。

3.2 数据类型的转换

隐性类型转换和显性类型转换。

3.2.1 隐性类型转换:

是指oracle自动完成的类型转换。在一些带有明显意图的字面值上,可以由Oracle自主判断进行数据类型的转换。 如:

SQL> select empno,ename from emp where empno='7788';    //empno本来是数值类型的,这里字符'7788'隐性转换成数值7788

EMPNO ENAME
---------- ----------
      7788 SCOTT

SQL> select length(sysdate) from dual;        //将date型隐转成字符型后计算长度

LENGTH(SYSDATE)
---------------
             19

SQL> SELECT '12.5'+11 FROM dual;        // 将字符型‘12.5’隐转成数字型再求和

'12.5'+11
----------
      23.5

SQL> SELECT 10+('12.5'||11) FROM dual;        //将数字型11隐转成字符与‘12.5’合并,其结果再隐转数字型与10求和

10+('12.5'||11)
---------------
         22.511

3.2.2 显性类型转换是强制完成类型转换(推荐),有三种形式的转换函数:

TO_CHAR
TO_DATE
TO_NUMBER

1)日期-->字符

SQL> select ename, hiredate, to_char(hiredate, 'DD-MON-YY') month_hired from emp where ename='SCOTT';

ENAME      HIREDATE            MONTH_HIRED
---------- ------------------- --------------
SCOTT      1987-04-19 00:00:00 19-4月 -87

fm压缩空格或左边的'0'

SQL> select ename, hiredate, to_char(hiredate, 'fmyyyy-mm-dd') month_hired from emp where ename='SCOTT';

ENAME      HIREDATE            MONTH_HIRED
---------- ------------------- ------------
SCOTT      1987-04-19 00:00:00 1987-4-19

//其实DD-MM-YY是比较糟糕的一种格式,因为当日期中天数小于12时,DD-MM-YY和MM-DD-YY容易造成混乱。

2)数字-->字符:9表示数字,L本地化货币字符

SQL> select ename, to_char(sal, 'L99,999.99') Salary from emp where ename='SCOTT';

ENAME      SALARY
---------- --------------------
SCOTT                ¥3,000.00

3)字符-->日期

SQL> select to_date('1983-11-12', 'YYYY-MM-DD') tmp_DATE from dual;

TMP_DATE
-------------------
1983-11-12 00:00:00

4)字符-->数字:

SQL> SELECT to_number('$123.45','$9999.99') result FROM dual;

RESULT
----------
    123.45

考点:使用to_number时如果使用较短的格式掩码转换数字,就会返回错误。不要混淆to_number和to_char转换。

例如:

SQL> select to_number('123.56','999.9') from dual;
select to_number(123.56,'999.9') from dual
                 *
第 1 行出现错误:
ORA-01722: 无效数字

SQL> select to_char(123.56,'999.9') from dual;

TO_CHA
------
 123.6

oracle之SQL的数据类型的更多相关文章

  1. Oracle、SQL Server、MySQL数据类型对比

    1,标准SQL数据类型 BINARY 每个字符占一个字节 任何类型的数据都可存储在这种类型的字段中.不需数据转换(例如,转换到文本数据).数据输入二进制字段的方式决定了它的输出方式. BIT 1 个字 ...

  2. Oracle的SQL基础

    1.了解SQL的种类 (1)DDL 数据定义语言:定义数据库中数据要如何存储的,包括对数据库对象的创建(create)修改(alter)删除(drop)的操作,这些对象主要有数据库,数据表,视图,索引 ...

  3. Datatypes translation between Oracle and SQL Server

    Datatypes translation between Oracle and SQL Server part 1: character, binary strings Datatypes tran ...

  4. Oracle PL/SQL

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言,是对 SQL 的扩展,它支持多种数据类型,如大对象和集合类型,可使用 ...

  5. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

  6. oracle PL/SQL(procedure language/SQL)程序设计

    PL/SQL(procedure language/SQL)语言是Oracle对SQL语言的过程化扩充,是一个完整的编程语言.PL/SQL实现了过程化语句(如分支.循环等)与SQL语句的无缝连接,将过 ...

  7. 初级Oracle和SQL学习者的学习笔记。韩顺平-玩转oracle。

    我自己就是一个oracle和sql的初学者,前段时间看了韩顺平老师的oracle视频教程,觉得很深入浅出,收获了很多.同时自己也做了不少笔记,现在想将纸质笔记以自己的话总结出来.俗话说得好:教学总是相 ...

  8. [强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!)

    原文:[强烈推荐]ORACLE PL/SQL编程详解之七:程序包的创建与应用(聪明在于学习,天才在于积累!) [强烈推荐]ORACLE PL/SQL编程详解之七: 程序包的创建与应用(聪明在于学习,天 ...

  9. ORACLE PL/SQL编程之八:把触发器说透

    原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...

随机推荐

  1. Angular Datatable的一些问题

    这几天改bug中发现的一些问题,小结一下.从简单到复杂逐个讲. angular datatable实质上是对jquery库的包装,但包装后不太好用,定制功能比较麻烦. 1. 基本用法 最简单的用法,大 ...

  2. DDD与Repository

    Repository已经不是什么新鲜概念了.DDD模型自2004年提出,发展至今已经16年了.但是不少企业却无法实施,其原因也很简单:DDD是基于需求的,而很多并不理解需求:DDD是容易实现的,而很多 ...

  3. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统 | 控制反转搭配简单业务

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 说明 我们上一节已经成功通过 连接提供程序存储库,获取到了 连接提供程序,但是连接提供程序和数据库连接依赖太深, ...

  4. Jmeter系列(50)- 详解 If 控制器

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 可以通过条件来控制是否运行其 ...

  5. 群晖系统设置自动拍摄共享文件夹快照的教程【江东网 JDX86.COM】

    Snapshot Replication 是数据备份和还原的工具.企业需要数据保护以防止因意外删除.应用程序崩溃.数据损毁和病毒所造成的数据丢失. 1.在套件中心下载该套件 2.打开套件可以看到NAS ...

  6. 面试中的这些点,你get了吗?

    一.前言 因为疫情的原因,小农从七月份开始找工作,到现在已经工作了一个多月了,刚开始找工作的时候,小农也担心出去面试技能不够,要懂的东西很多,自己也准备可能会面试一段时间,从找工作到入职花了十几天,总 ...

  7. oracle impdp 数据迁移 至RDS 亚马逊云

    背景: 公司年底打算将aws rds11.2.0.4 oracle 数据库升级到19c,所以需要进行升级测试,所以需要我把线上的库数据迁移到一台测试的rds oracle 亚马逊云的数据库中,然后升级 ...

  8. python安装wordcloud库报错

    pip install wordcloud 安装成了这样 红彤彤的一片 解决方法 https://www.lfd.uci.edu/~gohlke/pythonlibs/#wordcloud 下载对应版 ...

  9. 挂载磁盘不成功显示mount: /mnt: wrong fs type, bad option, bad superblock..............

    [23:25:32 root@8 ~]#mount /dev/sdb2 /mntmount: /mnt: wrong fs type, bad option, bad superblock on /d ...

  10. Unity中接收服务器消息并广播事件的实现

    最近接触的项目,是一个棋牌游戏,棋牌游戏需要在前端进行一些操作,然后向服务器发送数据包,在服务器接收到客户端的数据后,会在服务端进行一系列的判断之后,然后发送给客户端一个返回数据,客户端接收到这个返回 ...