我想避免在oracle中从时间戳中获取年份和第二部分。例如。我有一个字段输入到达时间,我有一个字段输入到达日期。我想只输入下午 6:35,同时输入到达时间,而不是整个表格中的"2013-12-13 6:35"。我该怎么做?
**Sample of my input**
Arrival Date Arrival Time
2013-12-23 6:35 PM
谁能帮我?
select to_char(systimestamp,'YYYY-MM-DD') from dual;
select to_char(systimestamp,'hh:mi:ss') from dual;
select to_char(arrival_date,'YYYY-MM-DD'),
to_char(arrival_time,'HH:MI AM')
from dual;
将sysdate
替换为所需的日期列。!
插入时
set arrival_date_str as String '2013-12-22' and arrival_time_str as '06:35 PM'
insert into my_table
(arrival_date,arrival_time)
values
(
to_date(:arrival_date_str,'YYYY-MM-DD'),
to_date(:arrival_date_str||' '||:arrival_time_str,'YYYY-MM-DD HH:MI AM')
);
在表格中,它可以与数据一起保存为"插入日期",时间保存为"06:35:00 PM"显然它可能会出错,所以你可以使用上面的。
实际上,您应该对日期和时间使用一列arrival_date。你能考虑一下吗?
如果您不需要额外的精度(如毫秒),我建议使用DATE
数据类型。更好的选择是将日期和时间部分存储在一个数据库列中。要检索它并显示在 UI 中,您必须使用(分别用于日期和时间部分):
to_char(your_time_column,'YYYY-MM-DD')
to_char(your_date_column,'HH:MI')
要将输入的UI值存储到数据库,您必须执行反向操作:
to_date(UI_date_part || ' ' || UI_time_part, 'YYYY-MM-DD HH:MI')
如果单独的数据库列是必需的,那么在插入中您可以使用上述转换函数:
insert into my_table(date_part_column, time_part_column)
values(to_timestamp('your_date_here', 'YYYY-MM-DD'),
to_timestamp('your_time_here', 'HH:MI'));