2017-01-23 5 views
-3

У меня есть год в качестве параметра в proc, который может быть 2017,2018 и т. Д.Oracle Дата - Получить 1 января данного года

Я хочу получить 1 января того же года в формате даты на сервере oracle.

Есть ли способ сделать это?

+0

Где хранится год (переменная, таблица, параметр, ...)? И что вам нужно сделать (простой запрос, процедура, ...)? И что вы пробовали до сих пор? – Aleksej

+0

У меня это как параметр в proc – Yogesh

+0

Какой тип параметр (число, varchar, ...)? И что вам нужно сделать: нужно ли распечатать значение? использовать его в параметре OUT? для вставки в некоторую таблицу,? Также, пожалуйста, разместите свой код. – Aleksej

ответ

2

Вам может понадобиться что-то вроде:

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') 
1

Просто преобразование в год к дате будет делать трюк

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 
0

Как указано выше, 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; 
Смежные вопросы