日期以时间格式合并

Posted

技术标签:

【中文标题】日期以时间格式合并【英文标题】:Date is getting merged in time format 【发布时间】:2019-10-11 10:47:26 【问题描述】:

当我在数据类型为 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

【问题讨论】:

【参考方案1】:

我认为困扰您的是表示层。如果要格式化这些值,请使用 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, year

正如我告诉你的:不要依赖隐式转换,控制过程,使用适当的函数和适当的格式掩码。

【讨论】:

我想在 2012 年以下插入日期。我也尝试过 to_char 但我需要输出而不使用 to_char 。例如 select * from date_with_time; 年份不是问题(我添加了更多代码;看看)。再说一遍:它是关于呈现,而不是数据本身。 @ShreeNaikawadi 我需要输出而不使用 to_char 为什么? 您的操作方式是插入 字符串(用单引号括起来的值)和 希望 Oracle 将正确解释这些字符串并隐式将它们转换为所需的数据类型。在我看来,是的——有必要控制它并使用适当的函数和数据格式。 我有;请参阅我的答案中的 [ EDIT ] 部分。我有点厌倦了一遍又一遍地重复它......不要依赖隐式转换,使用适当的函数和格式掩码。

以上是关于日期以时间格式合并的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据框中的多列合并为 Pandas 日期时间格式

Mailchimp API 合并字段 - 日期格式

合并日期和时间

如何在支持多种数据格式的 Pandas 中合并日期?

Word邮件合并不能发送HTML格式以及怎么带附件?

如何将 RDLC 中的日期时间格式化为以本地日期时间格式显示?