【问题标题】:Need to insert date column along with time and mins需要插入日期列以及时间和分钟
【发布时间】:2021-11-29 12:49:54
【问题描述】:

我需要插入日期列记录以及小时、分钟、秒,例如我的加入日期是 10/10/2021 但我需要插入 10/10/2021 08:05:25 我需要这样的输出插入

我的插入查询:

INSERT INTO lease_rent_receipts
(billing_start_date, billing_end_date,
charge_category, due_amount,
due_date, client_id,total_payable, description)
VALUES (l_billing_start_date,l_billing_end_date,l_charge_category, l_due_amount,
l_due_date, l_client_id,l_total_payable, l_description);

我需要与 hrs:min:sec 一起插入的 due_date 列的主要内容

请帮忙

【问题讨论】:

  • 您可以使用to_date() 使用合适的格式掩码将字符串变量转换为日期(包括时间 - 日期总是有时间,即使是午夜);或者,如果您有固定值,则可以转换时间戳文字。但是你的l_* 变量是什么数据类型,在你得到这个语句之前它们是如何提供或分配的?
  • 我们不知道 billing_start_date、billing_end_date、l_billing_start_date 或 l_billing_end_date 的数据类型。如果系统设计得当,它们应该是DATE类型,它固有地包含日期时间,一直到秒。我们也看不到你看到的让你认为他们没有时间的东西。很可能您的列 do 有时间,但您的输出未格式化以显示它。请记住,DATE(和 TIMESTAMP)是内部格式的二进制结构。
  • .(.. cont) 您在屏幕上看到的是内部二进制 DATE 的字符串表示形式,可以按照您指定的任何方式进行格式化。请更新您的问题以显示元素的定义、如何填充 l_billing 日期以及您所看到的让您认为您没有时间的内容。如果您重新格式化您的代码以使其真正可读而不是一堆乱七八糟的运行代码,这也会有所帮助。

标签: sql oracle sql-insert datetime-conversion


【解决方案1】:

为了演示我早期的 cmets。注意表格的最终查询,我正在查询相同的列 - 相同的数据 - 具有三种不同的格式:

SQL> create table my_demo
  2     (demo_date date)
  3  ;

Table created.

SQL> declare
  2   l_demo_date date := to_date('2021-10-22 12:21:43','yyyy-mm-dd hh24:mi:ss');
  3  begin
  4    insert into my_demo (demo_date)
  5          values (l_demo_date)
  6  ;
  7  end;
  8  /

PL/SQL procedure successfully completed.

SQL> select  demo_date,
  2          to_char(demo_date,'dd-Mon-yyyy') demo1,
  3          to_char(demo_date,'yyyy-mm-dd hh24:mi:ss') demo2
  4  from my_demo;

DEMO_DATE DEMO1                DEMO2
--------- -------------------- -------------------
22-OCT-21 22-Oct-2021          2021-10-22 12:21:43

1 row selected.

SQL> --
SQL> drop table my_demo purge;

Table dropped.

【讨论】:

    【解决方案2】:

    使用时间戳

      to_timestamp(date_col, 'DD/MM/YYYY 24hh:mm:ss' )
    

    【讨论】:

    • 为什么是 timestamp 而不是 date? DATE 包含最多几秒钟的时间,这就是 OP 想要的;不需要小数秒(这是 TIMESTAMP 包含的)。
    【解决方案3】:
    DECLARE
      l_billing_start_date lease_rent_receipts.billing_start_date%TYPE;
      l_billing_end_date   lease_rent_receipts.billing_end_date%TYPE;
      l_charge_category    lease_rent_receipts.charge_category%TYPE;
      l_due_amount         lease_rent_receipts.due_amount%TYPE;
      l_due_date           lease_rent_receipts.due_date%TYPE;
      l_client_id          lease_rent_receipts.client_id%TYPE;
      l_total_payable      lease_rent_receipts.total_payable%TYPE;
      l_description        lease_rent_receipts.description%TYPE;
    BEGIN
      -- Use a DATE literal and add an INTERVAL DAY TO SECOND literal.
      billing_start_date := DATE '2021-10-10' + INTERVAL '08:05:25' HOUR TO SECOND;
      -- or use a TIMESTAMP literal.
      billing_start_date := TIMESTAMP '2021-10-10 08:05:25';
      -- Or use TO_DATE.
      billing_start_date := TO_DATE('10/10/2021 08:05:25', 'DD/MM/YYYY HH24:MI:SS');
    
      -- Set other variables.
    
      INSERT INTO lease_rent_receipts(
        billing_start_date, billing_end_date, charge_category, due_amount,
        due_date, client_id,total_payable, description
      ) VALUES (
        l_billing_start_date, l_billing_end_date, l_charge_category, l_due_amount,
        l_due_date, l_client_id,l_total_payable, l_description
      );
    END;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 2013-05-24
      相关资源
      最近更新 更多