oracle中timestamp怎么用,Oracle Timestamp类型

在本教程中将学习Oracle TIMESTAMP数据类型以及如何在Oracle数据库中有效处理TIMESTAMP数据。

Oracle TIMESTAMP数据类型简介

TIMESTAMP数据类型用于存储日期和时间数据,包括年,月,日,时,分和秒。

另外,它存储小数秒,它不是由DATE数据类型存储的。

要定义TIMESTAMP列,请使用以下语法:

column_name TIMESTAMP[(fractional_seconds_precision)]

fractional_seconds_precision指定SECOND字段小数部分的位数。它的范围从0到9,这意味着可以使用TIMESTAMP数据类型来存储到纳秒的精度。

如果省略fractional_seconds_precision,则默认为6。

以下表达式说明了如何定义TIMESTAMP列:

...

started_at TMESTAMP(2),

...

在此示例中,started_at列是一个TIMESTAMP列,其分数秒精度设置为微秒。

Oracle TIMESTAMP文字

要指定TIMESTAMP文字,请使用以下格式:

TIMESTAMP 'YYYY-MM-DD HH24:MI:SS.FF'

以下示例说明了TIMESTAMP文字:

TIMESTAMP '1999-12-31 23:59:59.10'

有关如何构造格式字符串的详细信息,请查看Oracle日期格式。

Oracle TIMESTAMP示例

首先,创建一个名为logs的新表,其中包含一个TIMESTAMP列用于演示。

CREATE TABLE logs (

log_id NUMBER GENERATED BY DEFAULT AS IDENTITY,

message VARCHAR(2) NOT NULL,

logged_at TIMESTAMP (2) NOT NULL,

PRIMARY KEY (log_id)

);

其次,将新行插入到logs表中:

INSERT INTO logs (

message,

logged_at

)

VALUES (

'Invalid username/password for root user',

LOCALTIMESTAMP(2)

);

INSERT INTO logs (

message,

logged_at

)

VALUES (

'User root logged in successfully',

LOCALTIMESTAMP(2)

);

在这个例子中,使用LOCALTIMESTAMP(2)函数中得到当前的本地时间戳,其精确度秒为微秒,并将该值插入到logs表的logs_at列中。

第三,从日志表中查询TIMESTAMP数据:

SELECT log_id,

message,

logged_at

FROM logs;

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

fc6ceb5d21f78b5cc6b4a514723b6f0e.png

格式化TIMESTAMP值

要更改TIMESTAMP值的输出,可以使用TO_CHAR()函数,将TIMESTAMP值或列的名称作为第一个参数,将格式字符串作为第二个参数。

以下语句使用TO_CHAR()函数来格式化logged_at列中的值:

SELECT message,

TO_CHAR(logged_at, 'MONTH DD, YYYY "at" HH24:MI')

FROM logs;

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

97586a83a66a44660a734e1c13dff17a.png

提取TIMESTAMP组件

要提取TIMESTAMP组件(如年,月,日,小时,分钟和秒),请使用EXTRACT()函数:

EXTRACT( component FROM timestamp);

如以下面的语句示例:

SELECT

message,

EXTRACT(year FROM logged_at) year,

EXTRACT(month FROM logged_at) month,

EXTRACT(day FROM logged_at) day,

EXTRACT(hour FROM logged_at) hour,

EXTRACT(minute FROM logged_at) minute,

EXTRACT(second FROM logged_at) second

FROM

logs;

注意到NLS_DATE_LANGUAGE参数决定日期名称(Thursday),月份名称(August)以及TIMESTAMP缩写(THU,AUG)的语言。

默认的TIMESTAMP格式

当字符类型的值被转换为TIMESTAMP数据类型时,Oracle使用NLS_TIMESTAMP_FORMAT参数来控制默认时间戳格式。

以下语句返回Oracle数据库系统中当前的默认时间戳格式:

SELECT

value

FROM

V$NLS_PARAMETERS

WHERE

parameter = 'NLS_TIMESTAMP_FORMAT';

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

DD-MON-RR HH.MI.SSXFF AM

例如,假设要将新行以logs_attane值插入到logs表中,则使用TO_TIMESTAMP()函数将字符串转换为TIMESTAMP值,如下所示:

INSERT INTO logs (

message,

logged_at

)

VALUES (

'Test default Oracle timestamp format',

TO_TIMESTAMP('03-AUG-17 11:20:30.45 AM')

);

请注意,时间戳值 - '03-AUG-17 11:20:30.45 AM'遵循标准时间戳格式。

下面来验证结果:

SELECT

log_id, message, logged_at

FROM

logs;

执行上面示例代码,得到以下结果 -

0050a1977b58af86abc203181306d5a4.png

如果想使用其他时间戳格式而不是默认格式,则可以使用ALTER SESSION SET语句来执行此操作。

在本教程中,您已经了解了Oracle TIMESTAMP数据类型以及如何有效地处理时间戳。

¥ 我要打赏

纠错/补充

收藏

加QQ群啦,易百教程官方技术学习群

注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值