当前位置: 首页 > 教程 > Oracle >

Oracle Interval类型

精华
小牛编辑
156浏览
2023-03-14

在本教程中,我们将介绍Oracle INTERVAL数据类型,并演示如何有效处理区间值。

Oracle INTERVAL数据类型简介

Oracle提供了两种日期时间数据类型:DATETIMESTAMP用于存储时间点数据。另外,它提供INTERVAL数据类型用于存储一段时间。

有两种类型的INTERVAL

  • INTERVAL YEAR TO MONTH - 间隔使用年份和月份。
  • INTERVAL DAY TO SECOND - 使用包括小数秒在内的天,小时,分钟和秒存储间隔。

1. Oracle INTERVAL YEAR TO MONTH

INTERVAL YEAR TO MONTH数据类型使用YEARMONTH字段存储一段时间。

下面介绍一个INTERVAL YEAR TO MONTH

INTERVAL YEAR [(year_precision)] TO MONTH

year_precision代表YEAR字段中的位数。范围从09

year_precision是可选的。如果省略year_precision参数,则默认为2。也就是说,默认情况下,最多可以存储99年和11个月的期限,这个期限必须小于100年。

2. Oracle INTERVAL YEAR TO MONTH文字

要指定INTERVAL YEAR TO MONTH数据类型的文字值,可以使用以下格式:

INTERVAL 'year[-month]' leading (precision) TO trailing

leadingtrailing可以是YEARMONTH

以下是参数:

  • year[-month]
    yearmonth是整个区间的leadingtrailing的整数。 如果leadingYEARtrailingMONTH,那么month字段的范围从011
    trailing列必须小于leading列。 例如,INTERVAL '1-2' MONTH TO YEAR是无效的,因为leadingYEAR大于MONTHleading字段。
  • precision
    leading字段中的最大数字位数。精度范围为:0~9,默认值为2

下表说明了INTERVAL YEAR TO MONTH文字的示例:

INTERVAL YEAR TO MONTH文字 含意
INTERVAL '120-3' YEAR(3) TO MONTH 间隔120年,3个月; 由于前导字段的值大于默认精度(2位),因此必须指定前导字段精度YEAR(3)
INTERVAL '105' YEAR(3) 间隔105年0个月。
INTERVAL '500' MONTH(3) 间隔500个月。
INTERVAL '9' YEAR 间隔9年,相当于INTERVAL '9-0' YEAR TO MONTH
INTERVAL '40' MONTH 40个月或3年4个月,相当于INTERVAL '3-4' YEAR TO MONTH
INTERVAL '180' YEAR 无效的时间间隔,因为’180’有3个数字,它大于默认精度(2)

3. Oracle INTERVAL YEAR TO MONTH示例

首先,创建一个名为candidates的新表格:

CREATE TABLE candidates (
    candidate_id NUMBER,
    first_name VARCHAR2(50) NOT NULL,
    last_name VARCHAR2(50) NOT NULL,
    job_title VARCHAR2(255) NOT NULL,
    year_of_experience INTERVAL YEAR TO MONTH,
    PRIMARY KEY (candidate_id)
);

在此表中,有一个year_of_experience列,其数据类型为INTERVAL YEAR TO MONTH

其次,将数据插入candidates表:

INSERT INTO candidates (
    first_name,
    last_name,
    job_title,
    year_of_experience
    )
VALUES (
    'Camila',
    'Kramer',
    'SCM Manager',
    INTERVAL '10-2' YEAR TO MONTH
    );

在这个上面这个插入语句中,在year_of_experience列中插入了一个INTERVAL '10-2' YEAR TO MONTH 间隔字面值。

INSERT INTO candidates (
    first_name,
    last_name,
    job_title,
    year_of_experience
    )
VALUES (
    'Keila',
    'Doyle',
    'SCM Staff',
    INTERVAL '9' MONTH
    );

在这个语句中,在year_of_experience列中插入了一个为INTERVAL '9' MONTH的间隔字面值。

第三,查询INTERVAL YEAR TO MONTH列的数据:

SELECT
  *
FROM
  candidates;

执行上面查询语句,得到以下结果 -

4. Oracle INTERVAL DAY TO SECOND数据类型

INTERVAL DAY TO SECOND是一种按天,小时,分钟和秒钟存储一段时间。

以下显示INTERVAL DAY TO SECOND数据类型的语法:

INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

在上面这个语法中,

  • day_precision - 是DAY字段中的位数。取值范围是0~9,缺省值是2
  • fractional_seconds_precisionSECOND字段小数部分的位数。范围从0~9。如果省略fractional_seconds_precision,则默认为6

5. Oracle INTERVAL YEAR TO SECOND字面值

INTERVAL YEAR TO SECOND的字面值形式如下:

INTERVAL leading (leading_precision) to trailing(fractional_seconds_precision)

下表显示了INTERVAL YEAR TO SECOND文字的一些示例:

INTERVAL YEAR TO SECOND字面值 含意
INTERVAL '11 10:09:08.555' DAY TO SECOND(3) 11天,10小时,09分08秒,555/千秒。
INTERVAL '11 10:09' DAY TO MINUTE 11天,10小时和09分钟。
INTERVAL '100 10' DAY(3) TO HOUR 100天10个小时。
INTERVAL '999' DAY(3) 999天
INTERVAL '09:08:07.6666666' HOUR TO SECOND(7) 9小时08分钟和7.6666666秒。
INTERVAL '09:30' HOUR TO MINUTE 9小时30分钟。
INTERVAL '8' HOUR 8小时
INTERVAL '15:30' MINUTE TO SECOND 15分30秒。
INTERVAL '30' MINUTE 30分钟
INTERVAL '5' DAY 5天
INTERVAL '40' HOUR 40小时
INTERVAL '15' MINUTE 15分钟
INTERVAL '250' HOUR(3) 250个小时
INTERVAL '15.6789' SECOND(2,3) 四舍五入到15.679秒。 由于精度为3,分数秒’6789’被舍入为’679’

在本教程中,您已学习如何使用Oracle INTERVAL数据类型在表中存储时间段。