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. .net 跨平台桌面程序 avalonia:从项目创建到打包部署linux-64系统deepin 或 ubuntu。

    介绍: 目前微软还没有跨平台桌面程序的开发框架.github上有一个团队开始自行研发跨平台桌面框架,其中一款叫avalonia.avalonia 采用 Xaml+C#,类似于wpf,可运行于.netf ...

  2. 存储系列之 共享文件:链接link

    一.link与unlink的定义 1.link link是Linux文件系统目录管理的一个系统调用,创建一个链接,该链接只是创建一个目录项,上文ext2的介绍中提到过目录项是<文件名,inode ...

  3. 用前端姿势玩docker【五】快速构建中类Unix系统与Windows系统的差异化处理

    目录 用前端姿势玩docker[一]Docker通俗理解常用功能汇总与操作埋坑 用前端姿势玩docker[二]dockerfile定制镜像初体验 用前端姿势玩docker[三]基于nvm的前端环境构建 ...

  4. Azure Application Gateway(二)对后端 VM 进行负载均衡

    一,引言 上一节有讲到使用 Azure Application Gateway 为我们后端类型为 Web App 的 Demo 项目提供负载均衡,Azure Application Gateway 的 ...

  5. Mybatis-09-缓存

    缓存 什么是缓存[Cache]? 存在内存中的临时数据 提高查询效率,解决高并发的性能问题 为什么使用缓存? 减少和数据库的交互次数,减少系统开销,提高系统效率 什么样的数据能使用缓存? 经常查询且不 ...

  6. Nuxt.js 踩坑记录(2) 使用sequelize时,提示install mysql2,安装了仍然不能解决问题

    打算写一个nuxt.js+sequelize+mysql的个人博客,遇到了挺多坑,还是坚持了下来,终于解决了这个bug. 今天不知道我做了什么,页面就报错了,定位到了使用sequelize的JS文件里 ...

  7. 如何在Linux上使用xargs命令

    大家好,我是良许. 在使用 Linux 时,你是否遇到过需要将一些命令串在一起,但是其中一个命令不接受管道输入的情况呢?在这种情况下,我们就可以使用 xargs 命令.xargs 可以将一个命令的输出 ...

  8. MPI实现Jacobi

    一.Jacobi迭代 #include<stdio.h> #include<mpi.h> #include<stdlib.h> #define totalsize ...

  9. 温故知新——Spring AOP

    Spring AOP 面向切面编程,相信大家都不陌生,它和Spring IOC是Spring赖以成名的两个最基础的功能.在咱们平时的工作中,使用IOC的场景比较多,像咱们平时使用的@Controlle ...

  10. 详解 `HTTP` 系列之一

    前言 本文介绍的是HTTP的基础知识,包括HTTP的由来.HTTP的报文信息.状态码.HTTP三个版本的对比等.希望这篇简短的文章能对大家认识HTTP协议提供帮助. HTTP的前世今生 HTTP 由来 ...