1. 数值型
Oracle数据库中最常用的数值型是number
,它是一个变长的数字类型,可以用来存储整数、浮点数以及正负定点数。由于不同的定义方式可能会导致不同的输出结果,因此在使用number
类型时需要特别关注定义细节。
2. number类型定义
number
类型是一种非常灵活的数值类型,具有以下语法格式:
number [(precision [, scale])]
- precision(精度):指定数值的总位数(即数字的总位数,包括整数部分和小数部分)。它的最大值是38位。
- scale(标度):指定小数点右边的数字位数。
详细举例
定义和使用number
类型的具体例子:
-
创建表
在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));
这个表中定义了多个字段,分别使用了不同的
precision
和scale
参数。 -
插入数据
在创建表之后,向表中插入数据:SQL> INSERT INTO testnumbers VALUES( 1215678, 1231.5678, 1231.5678, 1231.5678, 0.12315, 0.00123156789, 1215.5678, 1250.5678, 12315678912.315); COMMIT;
这里插入的数据展示了如何在不同的
number
字段中存储数值。 -
输出数据
通过以下语句从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数据库中的日期时间型主要有三种:date
、timestamp
和interval
。其中,timestamp
和interval
相对复杂,需要更多注意。
3.1 date类型
date
类型用于存储日期和时间信息,包括世纪、年、月、日、时、分、秒,最小精度为秒。其语法格式如下:
date
下面通过两个小示例来说明date
类型数据。
-
示例2-1:使用SYSDATE函数获取当前服务器时间
为了将日期显示格式符合中国传统习惯,需要将当前会话的日期显示格式调整为年-月-日 时:分:秒
,通过以下命令实现:SQL> ALTER SESSION SET NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss';
这个命令还涉及到
TO_CHAR()
转换函数,将日期或数值型数据转换为字符串数据。 -
示例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类型的三种形式
-
timestamp [ (fractional_seconds_precision) ]
示例:使用timestamp
类型存储精度为9的时间戳:SQL> SELECT TIMESTAMP '2017-07-06 08:14:15.1234567' FROM dual;
-
timestamp [ (fractional_seconds_precision) ] with time zone
示例:存储含有时区信息的时间戳:SQL> SELECT TIMESTAMP '2017-07-06 08:00:00 -08:00' FROM dual;
-
timestamp with local time zone
示例:根据本地时区存储时间戳:SQL> SELECT SYSTIMESTAMP AT LOCAL FROM dual;
非常感谢您读到这里!如果您觉得这篇文章对您有帮助,可以关注一下博主。关注后,您将第一时间获得最新的AI、云计算、运维(Linux、数据库,容器等)技术,以及更多实用的技能干货。
让AI工具成为你的得力助手,感受AI工具的无限可能,让复杂的任务变得简单,让你的工作更加轻松和高效。