我试图在表中插入日期和时间,但最后只插入日期。这是代码:
create table myDate(date_value Date PRIMARY KEY );
INSERT INTO myDate(date_value ) VALUES (to_date('14/09/2010 18:00','dd/mm/yyyy hh24:mi'));
我的myDate表中只有2010年9月14日的库存。问题是什么(有没有一种方法可以在没有时间戳的情况下做到这一点(?
我认为值得注意的是,设置会话NLS参数的替代方案是显式使用to_char函数。我更喜欢to_char,因为它对任何阅读代码的人来说都是毫无疑问的。对NLS的依赖可能是不确定的,因为它可以设置在不同的级别。此外,如果没有显式使用to_char,oracle仍然会在后台调用它,使用NLS_DATE_FORMAT的控制设置。
SQL> -- create table
SQL> Create table mytest (dob date);
Table created.
Elapsed: 00:00:00.08
SQL> insert into mytest values (sysdate);
1 row created.
Elapsed: 00:00:00.03
SQL> commit;
Commit complete.
Elapsed: 00:00:00.00
SQL> select dob nls_default,
2 to_char(dob,'dd-mm-yyyy') dob1,
3 to_char(dob,'yyyy-mm-dd') dob2,
4 to_char(dob,'dd-mm-yyyy hh24:mi:ss') dob3
5 from mytest;
NLS_DEFAU DOB1 DOB2 DOB3
--------- ---------- ---------- -------------------
11-DEC-20 11-12-2020 2020-12-11 11-12-2020 11:45:31
1 row selected.
Elapsed: 00:00:00.03
SQL> drop table mytest purge;
Table dropped.
有关该主题的更多信息,请参阅本文。
根据您使用的工具,最有可能是显示问题。你可能想试试这种
alter session set nls_date_format = 'DD-MON-YYYY HH12:MI:SS PM';
这将更改您的估计,以显示带有完整时间戳的日期。我使用oracle sql开发人员https://www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html如果我在写查询时没有设置会话的日期,我可能会看到意外的日期格式。如果你也是这样,请告诉我们。