Oracle中的number和date类型,数据库管理轻松应对!

在这里插入图片描述

1. 数值型

Oracle数据库中最常用的数值型是number,它是一个变长的数字类型,可以用来存储整数、浮点数以及正负定点数。由于不同的定义方式可能会导致不同的输出结果,因此在使用number类型时需要特别关注定义细节。

2. number类型定义

number类型是一种非常灵活的数值类型,具有以下语法格式:

number [(precision [, scale])]
  • precision(精度):指定数值的总位数(即数字的总位数,包括整数部分和小数部分)。它的最大值是38位。
  • scale(标度):指定小数点右边的数字位数。

详细举例

定义和使用number类型的具体例子:

  1. 创建表
    在SQL*Plus中创建一个名为testnumbers的表,并定义不同的number字段:

    SQL> CREATE TABLE testnumbers(
         n1 number(8, 2),
         n2 number(8),
         n3 number(8, 1),
         n4 number(8, -2),
         n5 number(8, 8),
         n6 number(8, 10),
         n7 number(8, -2),
         n8 number(8),
         n9 number(*, 2));
    

    这个表中定义了多个字段,分别使用了不同的precisionscale参数。

  2. 插入数据
    在创建表之后,向表中插入数据:

    SQL> INSERT INTO testnumbers VALUES(
         1215678,
         1231.5678,
         1231.5678,
         1231.5678,
         0.12315,
         0.00123156789,
         1215.5678,
         1250.5678,
         12315678912.315);
    COMMIT;
    

    这里插入的数据展示了如何在不同的number字段中存储数值。

  3. 输出数据
    通过以下语句从testnumbers表中查询和输出插入的数据:

    SELECT 
        n1 as "number(8, 2): 1215678",
        n2 as "number(8): 1231.5678",
        n3 as "number(8,1): 1231.5678",
        n4 as "number(8,-2): 1231.5678",
        n5 as "number(8,8): 0.12315",
        n6 as "number(8,10): 0.00123156789",
        n7 as "number(8,-2): 1215.5678",
        n8 as "number(8): 1250.5678",
        n9 as "number(*,2): 12315678912.315"
    FROM testnumbers;
    

    这个查询语句会显示插入数据在不同number类型定义下的存储结果。

3. 日期时间型

Oracle数据库中的日期时间型主要有三种:datetimestampinterval。其中,timestampinterval相对复杂,需要更多注意。

3.1 date类型

date类型用于存储日期和时间信息,包括世纪、年、月、日、时、分、秒,最小精度为秒。其语法格式如下:

date

下面通过两个小示例来说明date类型数据。

  1. 示例2-1:使用SYSDATE函数获取当前服务器时间
    为了将日期显示格式符合中国传统习惯,需要将当前会话的日期显示格式调整为年-月-日 时:分:秒,通过以下命令实现:

    SQL> ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
    

    这个命令还涉及到TO_CHAR()转换函数,将日期或数值型数据转换为字符串数据。

  2. 示例2-2:分别使用SYSDATE函数和SYSTIMESTAMP函数获取当前服务器的时间

    SQL> SELECT SYSDATE AS now1, TO_CHAR(SYSDATE,'YYYY/MM/DD HH24:MI:SS') AS now2 FROM DUAL;
    

    这里,SYSDATE用于获取当前的日期和时间,SYSTIMESTAMP则用于获取更为精确的时间戳。

4. 时区和会话时区

Oracle数据库支持设置时区,以便在全球不同地点进行访问时能够正确处理时间。数据库的时区称为数据库时区(DATABASE TIME ZONE),会话的时区称为会话时区(SESSION TIME ZONE)。

  • 数据库时区由数据库参数TIME_ZONE控制,可以通过以下语句查看:
    SQL> SELECT DBTIMEZONE FROM DUAL;
    
  • 会话时区可以通过以下命令查看:
    SQL> SELECT SESSIONTIMEZONE FROM DUAL;
    

5. timestamp类型

Oracle支持多种timestamp类型,用于存储时间戳数据,可以指定小数秒部分的精度,默认值为9。根据应用场景的不同,可以选择使用不同时区的timestamp类型。

5.1 timestamp类型的三种形式

  1. timestamp [ (fractional_seconds_precision) ]
    示例:使用timestamp类型存储精度为9的时间戳:

    SQL> SELECT TIMESTAMP '2017-07-06 08:14:15.1234567' FROM dual;
    
  2. timestamp [ (fractional_seconds_precision) ] with time zone
    示例:存储含有时区信息的时间戳:

    SQL> SELECT TIMESTAMP '2017-07-06 08:00:00 -08:00' FROM dual;
    
  3. timestamp with local time zone
    示例:根据本地时区存储时间戳:

    SQL> SELECT SYSTIMESTAMP AT LOCAL FROM dual;
    

非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。

让AI工具成为你的得力助手,感受AI工具的无限可能,让复杂的任务变得简单,让你的工作更加轻松和高效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周同学的技术栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值