SQL日期和时间函数和运算符

NOODB为日期和时间值处理提供功能支持。

日期/时间运算符

Addition and subtraction operations may be performed on 日期时间戳 values. The table below illustrates this functionality. Input may be of any of the following:

  • an expression (i.e., table column) of 日期 or 时间戳 data type

  • 日期/时间函数(见下文)

  • 整数“仅用为右侧运算符”,并返回与左侧操作符一致的数据类型

操作员 描述

+

将整数添加到日期/时间文字中

select 当前的日期 + 7 from dual;
/* Today's date + 7 days */

+

将整数添加到日期/时间函数

select 现在() + 7 from dual;
/* Today's date/time + 7 days */

-

从日期/时间文字中减去整数

select 当前的日期 - 7 from dual;
/* Today's date - 7 days */
使用+和 - 运算符的算术运算支持日期/时间类型,但通常建议是使用 日期_ADD, 日期_SUB日期DIFF 函数以获得相同的结果。

日期/时间函数

这following table presents date and time value processing functions.

功能 描述

当前的日期

返回当前事务开始的日期。


返回类型: 日期

选择 CURRENT 日期 FROM DUAL;

当前的日期

As with 当前的日期, returns the date of the start of the current transaction.


返回类型: 日期

选择 当前的日期 FROM DUAL;

当前时间

返回当前事务开始的时间。


返回类型: 时间

选择 CURRENT 时间 FROM DUAL;

当前时间
[( [p] )]

As with 当前时间, returns the time of the start of the current transaction. Fractional seconds are optional and may be specified by the precision value enclosed in parentheses. Values are 0-9. The default, if not provided, is 0.


返回类型: 时间

选择 当前时间 FROM DUAL;

选择 当前时间() FROM DUAL;

选择 当前时间(3) FROM DUAL;

当前时间戳

返回当前事务开始的时间戳。看 现在() 下面用于当前时间戳。


返回类型: 时间戳

选择 CURRENT 时间戳 FROM DUAL;

current_timestamp.
[( [p] )]

As with 当前时间戳, returns the timestamp of the start of the current transaction. See 现在() 下面用于当前时间戳。逐秒显示,高达9.尾随零度从分数秒掉落。


返回类型: 时间戳

选择 current_timestamp. FROM DUAL;

选择 current_timestamp.(3) FROM DUAL;

日期 (string)

Converts a string to a 日期 data type. See SQL日期和时间类型 有关日期文字列表。在第一个单词之后解析字符串文字停止,忽略其余字符串值。


返回类型: 日期

选择 日期('02-01-2013 01:00') FROM DUAL;

日期_ADD ( input_value , INTERVAL quantity_expr unit_of_time )

将时间间隔添加到日期/时间输入值。


返回类型: 日期, 时间戳 or 时间
日期_ADD 下面的功能部分。

日期DIFF (间隔, 开始日期, 结束日期)

返回表示单位的两个日期之间的时间的整数值。返回值表示指定的start_date和end_date之间交叉的指定边界。


返回类型: INTEGER
日期DIFF 下面的功能部分。

日期INTERVAL (间隔, 开始日期, 结束日期)

返回一个双重精度值,表示单位的两个日期之间的时间。返回值表示指定的start_date和end_date之间横跨的指定边界,包括分数组件。


返回类型: DOUBLE PRECISION
日期INTERVAL 下面的功能部分。

日期_SUB(input_value , INTERVAL quantity_expr unit_of_time)

从日期/时间输入值中减去时间间隔。


返回类型: 日期, 时间戳 or 时间
日期_SUB 下面的功能部分

EXTRACT(field FROM dt)

提取部分日期和时间值。


返回类型: DOUBLE PRECISION
EXTRACT 下面的功能部分。

现在()

这current timestamp at the instant that the function is called.


返回类型: 时间戳

选择 现在() FROM DUAL;

Arithmetic operations on timestamps increment or decrement the component of the timestamp date by the value of the interval.

从标准时间区到夏令时的操作,调整24小时的24小时后,反之亦然,反之亦然。例如,会话时区设置为‘America/New_York’, with timestamp ‘2013-03-09 12:00' + 1`(添加1天)将产生25小时时间戳'2013-03-10 13:00’,随着夏令时的时间在2013-03-10 02:00生效.

日期_ADD日期_SUB Functions

日期_ADD日期_SUB functions return the result of adding or subtracting an INTERVAL of time to/from an input value. The return type is driven by the data type of the input value.

参数类型

间隔类型

返回类型

日期

日月年

日期

日期

小时,分钟,第二个

空值

时间戳

任何

时间戳

时间

日月年

空值

时间

小时,分钟,第二个

时间

字符串字面量

任何

时间戳

句法

日期_ADD(input_value, INTERVAL quantity_expr unit_of_time)
DATE_SUB(input_value, INTERVAL quantity_expr unit_of_time)

参数

input_value

A value of 日期, 时间 or 时间戳 data type to be manipulated. If the value is 空值, the function returns a 空值 value

quantity_expr

Some quantity of unit_of_time, treated as an integer, specifying the INTERVAL value to be added to the 日期 or 时间戳 value. If the quantity_expr has fractions it will be rounded up or down, with .5 or greater rounding up. If the value is 空值, the function returns a 空值 value.

unit_of_time

A keyword indicating the time units to be added to or subtracted from the input_value. If the input_value data type cannot be manipulated by the unit_of_time specified, the function returns a 空值 value. Valid unit_of_time keywords allowed for each valid input_value data type is as follows:

单位时间 日期 时间 时间戳

X

X

X

X

X

X

小时

X

X

分钟

X

X

第二

X

X

微秒

X

X

星期

X

X

例子

选择 DATE_ADD('2014-01-01', INTERVAL 1 ) FROM DUAL;
     [DATE_ADD]
 -------------------
 2014-01-02 00:00:00

选择 DATE_ADD(NOW(), INTERVAL 1 小时) FROM DUAL;
         [DATE_ADD]
 --------------------------
 2014-01-20 16:50:24.392728

选择 DATE_SUB('2015-01-01', INTERVAL 1 WEEK) FROM DUAL;
     [DATE_SUB]
 -------------------
 2014-12-25 00:00:00

/* adding INTERVAL HOUR to input value of DATE data type returns NULL */
选择 DATE_ADD(当前的日期, INTERVAL 5 小时) FROM DUAL;
 [DATE_ADD]
 -----------
   <null>

日期DIFF Function

这<interval>指在两个日期之间测量的时间递增。例如,要确定开始日期和结束日期之间的整个小时数或几天。有效值是秒,分钟,小时,日和月份。

这<start_date>指测量时间段的开始日期和<end_date>指该期间的结束日期。

例子

选择 DATEDIFF(,'2015-02-01','2015-02-19') FROM DUAL;
 [DATEDIFF]
 -----------
     18

选择 DATEDIFF(,'2015-02-01 08:30:00.000000','2015-02-19 17:10:00.000000') FROM DUAL;
 [DATEDIFF]
 -----------
     18

日期INTERVAL Function

这<interval>指在两个日期之间测量的时间递增。例如,确定开始日期和结束日期之间的数小时数或几天。有效值是秒,分钟,小时,日和月份。

这<start_date>指测量时间段的开始日期和<end_date>指该期间的结束日期。

例子

选择 DATEINTERVAL(,'2015-02-01 08:30:00.000000','2015-02-19 17:10:00.000000') FROM DUAL;
  [DATEINTERVAL]
 -----------------
 18.36111111111111

选择 DATEINTERVAL(小时,'2015-02-01 08:30:00.000000','2015-02-19 17:10:00.000000') FROM DUAL;
  [DATEINTERVAL]
 -----------------
 440.6666666666667