【问题标题】:Column with exact date and time of recording记录准确日期和时间的列
【发布时间】:2020-01-05 06:36:22
【问题描述】:

如何向数据库表中添加确切的日期和时间,向该表中添加新记录

SELECT * FROM test;

ID         NAME       DT
---------- ---------- ----------
1         Ana         01.01.2019  00:00:00
2         Ina         01.01.2019  00:00:00

我想要创建这个的确切时间 示例:

ID         NAME       DT
---------- ---------- ----------
1         Ana         01.01.2019  10:41:22
2         Ina         01.01.2019  10:45:17



CREATE TABLE table
(
Id  NUMBER(10),
Name varcahar2(10),
DT   date
);

【问题讨论】:

  • 表本身没问题;问题是您在 DT 列中插入的值(应该是 SYSDATE)以及显示它的方式(一种选择是使用TO_CHAR(dt, 'dd.mm.yyyy hh24:mi:ss'))如果 - 默认情况下 - 您看不到时间组件。跨度>

标签: sql oracle oracle11g oracle-apex


【解决方案1】:

使用时间戳

CREATE TABLE table
(
Id  NUMBER(10),
Name varchar2(10),
DT   TIMESTAMP
);

【讨论】:

  • 就 Oracle 而言,DATE 将完成这项工作,因为 OP 需要几秒钟内的信息。
  • 我试过时间戳,但答案是“03-SEP-19 12.00.00.000000 AM”
【解决方案2】:

用您的数据插入当前日期,并使用分析函数比较自上次事件以来的时间。

    CREATE TABLE so_test
    (
    Id  NUMBER(10),
    Name varchar2(10),
    DT   date
    );
    insert into so_test values (1, 'Scott', sysdate);
    insert into so_test values (2, 'Andrii', sysdate);
    insert into so_test values (3, 'Zaynul', sysdate);

    select id, name, dt 
      ,round((dt-LAG(dt) OVER (ORDER BY id))*86400) seconds_diff
    from so_test

        ID NAME       DT                  SECONDS_DIFF
---------- ---------- ------------------- ------------
         1 Scott      02-09-2019 16:02:47             
         2 Andrii     02-09-2019 16:02:58           11
         3 Zaynul     02-09-2019 16:03:12           14

【讨论】:

    【解决方案3】:
    CREATE TABLE test
    (
    Id  NUMBER(10),
    Name varchar2(10),
    DT   date
    );
    

    插入数据:

    INSERT INTO test values (1, 'Ana', sysdate);
    INSERT INTO test values (2, 'Ina', sysdate);
    COMMIT;
    

    查询结果:

    SELECT id, name, TO_CHAR(dt, 'dd.mm.yyyy hh24:mi:ss') FROM test;
        ID NAME       TO_CHAR(DT,'DD.MM.Y
    ---------- ---------- -------------------
             1 Ana        02.09.2019 10:07:18
             2 Ina        02.09.2019 10:07:18
    

    【讨论】:

      【解决方案4】:

      Oracle 设置

      CREATE TABLE table_name(
        Id   NUMBER(10),
        Name VARCHAR2(10),
        DT   DATE
      );
      

      选项 1

      使用 DATEINTERVAL 文字:

      INSERT INTO table_name ( id, name, dt )
      VALUES ( 1, 'Ana', DATE '2019-01-01' + INTERVAL '10:41:22' HOUR TO SECOND );
      

      选项 2

      使用TO_DATE 并从字符串转换:

      INSERT INTO table_name ( id, name, dt )
      VALUES ( 2, 'Ina', TO_DATE( '2019-01-01 10:45:17', 'YYYY-MM-DD HH24:MI:SS' ) );
      

      选项 3

      使用TIMESTAMP 文字:

      INSERT INTO table_name ( id, name, dt )
      VALUES ( 3, 'Ona', TIMESTAMP '2019-01-01 10:49:12' );
      

      选项 4

      如果您想要当前日期和时间,请使用SYSDATE:

      INSERT INTO table_name ( id, name, dt )
      VALUES ( 4, 'Una', SYSDATE );
      

      CURRENT_DATE:

      INSERT INTO table_name ( id, name, dt )
      VALUES ( 4, 'Una', CURRENT_DATE );
      

      输出

      ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
      SELECT * FROM table_name;
      

      SELECT id, name, TO_CHAR( dt, 'YYYY-MM-DD HH24:MI:SS' ) AS dt FROM table_name;
      

      输出:

      身份证 |姓名 | DT -: | :--- | :----------------- 1 |安娜 | 2019-01-01 10:41:22 2 |伊娜 | 2019-01-01 10:45:17 3 |奥纳 | 2019-01-01 10:49:12 4 |乌娜 | 2019-09-02 09:22:28

      db小提琴here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-07
        • 1970-01-01
        • 2021-08-05
        • 1970-01-01
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多