我想在oracle中避免使用TIMESTAMP的年份和第二部分。例如。我有一个字段输入到达时间,我有另一个字段输入到达日期。我想在下午6:35进入,而不是整个'2013-12-13 6:35'到达我的桌子。我怎么能这样做?
**Sample of my input**
Arrival Date Arrival Time
2013-12-23 6:35 PM
有人可以帮我吗?
答案 0 :(得分:1)
select to_char(systimestamp,'YYYY-MM-DD') from dual;
select to_char(systimestamp,'hh:mi:ss') from dual;
答案 1 :(得分:1)
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。你能考虑一下吗?
答案 2 :(得分:0)
如果您不需要额外的精度(如毫秒),我建议使用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'));