为什么SQL时间戳不打印时间



我创建了一个数据类型为DATE的列,并插入了一行显示当前日期和时间的记录。但是,记录只反映了当前日期,而没有反映时间。我能做些什么来反映日期和时间?

insert into TFCC_EVENT_LOG(logged_time) values (select CURRENT_TIMESTAMP from dual);

我尝试使用下面的代码,但它返回了一个错误,如下所示。

insert into TFCC_EVENT_LOG(id,userid,menu, action, description, status, logged_time) values (TEL_pk.nextval,'ngis', 'New TFCC Submission', 'New TFCC', 'New Submission Started', 'Success', (select to_char(logged_time, 'DD-MON-YYYY HH:M:SS PM') from TFCC_EVENT_LOG));

从命令中的第62行开始时出错-在TFCC_EVENT_LOG(id、userid、菜单、操作、描述、状态、logged_time)中插入值(TEL_pk.nextval、'ngis'、'New-TFCCSubmission'、New-TFCC、'NewSubmissionStarted'、'Success',(从TFCC_EVENT_LOG中选择to_char(logged_time、'DD-MON-YYYY HH:M:SS PM'))错误报告-ORA-01821:日期格式无法识别

真正帮助我的是会话的更改。

alter session set nls_date_format = 'DD-MM-YYYY HH24:MI:SS';

current_timestamp返回一个timestamp,而不是date,因此尽管应该安全地转换它,但最好使用sysdate,除非您特别需要时区语义。时间戳是很好的东西,但它们为会话与服务器时区的许多问题打开了大门,所以我建议谨慎使用它们,并进行大量测试。

一旦表中有一个date值,要将其复制到另一个表中,就不应该试图用字符函数来操作它。to_date()需要一个字符串,因此在日期使用它会调用使用会话默认区域和格式设置的字符串的隐式转换,这可能会产生不可预测的结果。

客户端工具可以使用nls_date_format或它们自己的设置来显示日期值。如果您没有看到时间组件,则很可能是显示格式问题。

在查询中,您试图使用to_char函数以特定格式更改时间戳,但给定的格式是错误的。您必须将格式设置为'DD-MON-YYY HH:MI:SS PM'

请尝试以下代码:

insert into TFCC_EVENT_LOG(id,userid,menu, action, description, status, logged_time) values (TEL_pk.nextval,'ngis', 'New TFCC Submission', 'New TFCC', 'New Submission Started', 'Success', (select to_char(logged_time, 'DD-MON-YYYY HH:MI:SS PM') from TFCC_EVENT_LOG)); 

最新更新