【问题标题】:Oracle Date - Get 1 Jan of given yearOracle 日期 - 获取给定年份的 1 月 1 日
【发布时间】:2017-06-08 06:22:15
【问题描述】:

我在 proc 中有年份作为参数,可以是 2017、2018 等。

我想在 oracle 服务器中以日期格式获取那一年的 1 月 1 日。

有什么办法吗?

【问题讨论】:

  • 您将年份存储在哪里(变量、表格、参数……)?你需要做什么(一个简单的查询,一个过程,......)?到目前为止,您尝试过什么?
  • 我把它作为 proc 中的参数
  • 参数是什么类型(number, varchar, ...)?你需要做什么:你需要打印价值吗?在 OUT 参数中使用它?插入到某个表中,?另外,请发布您的代码。
  • 它是数字,我想在 where 子句中使用它

标签: oracle oracle11g date-arithmetic


【解决方案1】:

你可能需要这样的东西:

create or replace procedure checkDate ( pYear IN number) is
    vNum number;
begin
    select count(1)
    into vNum
    from ( select sysdate as dateColumn from dual) someTable 
    where dateColumn > to_date('01-01-' || pYear, 'dd-mm-yyyy');
    --
    dbms_output.put_line(vNum);
end;

【讨论】:

    【解决方案2】:

    假设你的参数是 P_year...

    TO_DATE('01/01/'||P_year,'DD/MM/YYYY')
    

    【讨论】:

      【解决方案3】:

      只需将年份转换为日期即可

      SQL> select to_date('2017','YYYY') from dual;
      
      TO_DATE('2017','YYY
      -------------------
      01/01/2017 00:00:00
      

      但如果您担心在某个阶段此默认设置可能会发生变化,您也可以将数据截断到年份以确保绝对确定

      SQL> select trunc(to_date('2017','YYYY'),'YYYY') from dual;
      
      TRUNC(TO_DATE('2017
      -------------------
      01/01/2017 00:00:00
      

      【讨论】:

        【解决方案4】:

        如上所述,TRUNC 最适合这种情况。

        SET define ON;
        SET serveroutput ON;
        DECLARE
          lv_var  VARCHAR2(100):='&Enter_year';
          lv_date DATE;
        begin
          SELECT TRUNC(to_date(lv_var,'YYYY')) INTO lv_date FROM dual;
          dbms_output.put_line(lv_date||' --> Req date');
        END;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-19
          • 1970-01-01
          • 2013-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多