将硬编码时间戳添加到 Oracle sql 中的列

问题描述 投票:0回答:1

我有一列的时间戳如下

select grade_date from grades_vs

将给出输出

grade_date
2023-11-18T00:00:00.000+00:00

我想更改时间戳部分并将其硬编码为

2023-11-18T04:36:16.000+00:00

主要是加上

'T04:36:16.000+00:00'
,让时间正好是这个格式,而不是

00:00:00

我为此使用了 to_timestamp 但它给了我一个文字字符串错误。我如何硬编码这个值并将列转换为时间戳?

sql oracle oracle-sqldeveloper
1个回答
0
投票

如果您的列是日期,那么它没有小数秒或时区;因此,这些内容被硬编码在数据的表示中,可能在您的 NLS 设置中:

alter session set nls_date_format = 'YYYY-MM-DD"T"HH24:MI:SS".000+00:00"'

或者可能直接由您的客户端(或在 SQL Developer 中设置的 NLS 设置,当您标记该客户端时)。

无论如何...因为它是 DATE 而不是 VARCHAR2 数据类型,您可以通过添加表示您想要的小时、分钟和秒的间隔来直接设置时间。如果您只想查看查询中修改的值,那么:

select grade_date + interval '04:36:16' hour to second as grade_date
from grade_vs
GRADE_DATE
2023-11-18T04:36:16.000+00:00

或者先将非午夜时间的任何值重置回午夜:

select trunc(grade_date) + interval '04:36:16' hour to second as grade_date
from grade_vs
GRADE_DATE
2023-11-18T04:36:16.000+00:00

如果您想更改表中的值,则可以使用相同的计算进行更新:

update grade_vs
set grade_date = grade_date + interval '04:36:16' hour to second;

或者先将非午夜时间的任何值重置回午夜:

update grade_vs
set grade_date = trunc(grade_date) + interval '04:36:16' hour to second;

使用上面的 NLS 格式为您提供:

select * from grade_vs
GRADE_DATE
2023-11-18T04:36:16.000+00:00

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.