日期将以时间格式合并

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

当我在数据类型为TIMESTAMP的表中插入数据时。日期正在以时间格式合并,当我在2013或2011年以下插入日期时,会发生此问题。我也尝试过更改NLS格式,但是我没有用。

oracle中是否有时间戳的替代方法。但是我能够使用to_date插入并获得令人满意的输出,但是我必须插入'21 -feb-2011'并需要输出'21 -02-11 00:00:00.000000000 AM 21-02-11'

create table date_with_time (Timestamp_ex TIMESTAMP , Date_ex Date);

insert into date_with_time values('21-feb-2011','21-feb-2011');

select * from date_with_time;

结果:

Timestamp_ex 
21-02-20 11:00:00.000000000 AM      

Date_ex 
21-02-11

实际结果:结果:

Timestamp_ex                    
21-02-20 11:00:00.000000000 AM  

Date_ex 
21-02-11

预期结果:

Timestamp_ex

21-02-11 00:00:00.000000000 AM     

Date_ex  

21-02-11
java plsql oracle12c
1个回答
0
投票

我想,这是表示层困扰您。如果要格式化这些值,请使用TO_CHAR和适当的格式掩码。例如:

SQL> create table test (ts_ex timestamp, dt_ex date);

Table created.

SQL> insert into test values (systimestamp, sysdate);

1 row created.

这是默认的NLS设置返回的内容:

SQL> select * from test;

TS_EX                          DT_EX
------------------------------ ----------
11.10.19 12:50:05,468126       11.10.2019

如果您希望使用其他格式,请这样说:

SQL> select to_char(ts_ex, 'dd-mm-yy hh:mi:ss:ff am') tx,
  2         to_char(dt_ex, 'dd.mm.yyyy hh24:mi:ss') dx
  3  from test;

TX                             DX
------------------------------ -------------------
11-10-19 12:50:05:468126 PM    11.10.2019 12:50:05

SQL>

截至2012:没关系,真的。再一次:它是您想要的表示形式,而不是数据存储到表中的方式(采用Oracle内部格式)。

SQL> insert into test (ts_ex, dt_ex) values
  2    (to_timestamp('21.02.2011', 'dd.mm.yyyy'),
  3     to_date     ('21.02.2011', 'dd.mm.yyyy'));

1 row created.

SQL> alter session set nls_date_format = 'dd-mm-yy';

Session altered.

SQL> alter session set nls_timestamp_format = 'dd-mm-yy hh:mi:ss:ff am';

Session altered.

SQL> select * from test;

TS_EX                          DT_EX
------------------------------ --------
21-02-11 12:00:00:000000 AM    21-02-11

SQL>

[编辑:根据您的评论运行代码]

SQL> create table date_with_time (Timestamp_ex TIMESTAMP , Date_ex Date);

Table created.

SQL> insert into date_with_time values('21-feb-2019','21-feb-2019');

1 row created.

SQL> select * from date_with_time;

TIMESTAMP_EX                   DATE_EX
------------------------------ --------
21.02.20 19:00:00,000000       21.02.19
      ^^^^^
      this is 2019, current year

正如我告诉你的:不要依赖隐式转换,可以控制过程,可以使用带有适当格式掩码的适当功能。

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