我有一列的时间戳如下
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 但它给了我一个文字字符串错误。我如何硬编码这个值并将列转换为时间戳?
如果您的列是日期,那么它没有小数秒或时区;因此,这些内容被硬编码在数据的表示中,可能在您的 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 |