如何在oracle存储过程中传递时间戳值?

eaf3rand  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(493)

我有一个具有timestamp数据类型的表列。如何将时间戳值传递给表列?我正在传递给oracle过程中的\u timestamp('1240','hh:mi:ss')。在db表中,我的值类似于01-aug-20 12.40.00.000000000 pm。我只想在db表中存储时间戳。有办法吗?请在这方面指导我。谢谢

pepwfjgg

pepwfjgg1#

您似乎对值存储的内容感到困惑。一 TIMESTAMP 数据类型存储日期和时间,包括年、月、日、时、分、秒和可选的分秒和时区组件;你不能有一个 TIMESTAMP 只有小时,分钟和秒的组成部分,因为它总是有一年一天的组成部分。
如果要存储时间,请执行以下任一操作:
使用 INTERVAL DAY TO SECOND 数据类型(零天);
使用 DATE (或者,如果你想要分数秒, TIMESTAMP )数据类型并将年-日组件设置为固定值(或忽略它们);
使用固定格式的字符串;或
存储午夜后的秒数并使用 TO_DATE( value, 'SSSSS' ) 转换为日期然后 TO_CHAR 根据需要格式化。
我想说,如果你想增加时间,那么使用 INTERVAL 本机支持的数据类型。
例如:

CREATE TABLE times1 ( value INTERVAL DAY TO SECOND );

INSERT INTO times1 ( value ) VALUES ( INTERVAL '12:40' HOUR TO MINUTE );

SELECT * FROM times1;

输出:

| VALUE               |
| :------------------ |
| +00 12:40:00.000000 |

如果要显示时间,请使用 DATE 并忽略每日组件,因为您可以使用 TO_CHAR .
例如:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';

CREATE TABLE times2 ( value DATE );

INSERT INTO times2 ( value )
-- Fixed date
SELECT DATE '1970-01-01' + INTERVAL '12:40' HOUR TO MINUTE FROM DUAL UNION ALL
-- Today's date
SELECT TRUNC( SYSDATE ) + INTERVAL '12:40' HOUR TO MINUTE FROM DUAL UNION ALL
-- First of current month
SELECT TO_DATE( '12:40', 'HH24:MI' ) FROM DUAL;

SELECT value, TO_CHAR( value, 'HH24:MI' ) FROM times2;

输出:

VALUE               | TO_CHAR(VALUE,'HH24:MI')
:------------------ | :-----------------------
1970-01-01 12:40:00 | 12:40                   
2020-08-05 12:40:00 | 12:40                   
2020-08-01 12:40:00 | 12:40

db<>在这里摆弄

相关问题