2017-01-03 6 views
3

Oracleサーバーで以下の照会を実行しようとしています。私は多くの反復を試み、これまでに数時間も失われてしまった。等式の結果を出力するOracleの同等の要素は何ですか?MS SQL日付照会のOracle相当品

Declare @WeekendingDay varchar(10) 
Declare @DayNumber int 
Declare @InputDate varchar(10) 

Declare @conInputDate datetime 
Declare @outWeekending datetime 
Declare @CovertToInt varchar(10) 
/* ------------------------------Inputs ------------------------------ */ 
/* uncomment the weekending day you want */ 
--Set @WeekendingDay = 'Monday' 
--Set @WeekendingDay = 'Tuesday' 
Set @WeekendingDay = 'Wednesday' 
--Set @WeekendingDay = 'Thursday' 
--Set @WeekendingDay = 'Firday' 
--Set @WeekendingDay = 'Saturday' 
--Set @WeekendingDay = 'Sunday' 

/* Date you want the weekending of */      
Set @InputDate = '29/12/2016' 

/* Yes to convert Date as INT, No for normal date output */ 
Set @CovertToInt = 'No' 

/* --------------------♫♫♫…Start the magical dance…♫♫♫-------------------- */ 
Set @DayNumber = CASE @WeekendingDay 
       WHEN 'Sunday' Then 1 
       WHEN 'Monday' THEN 2 
       WHEN 'Tuesday' THEN 3 
       WHEN 'Wednesday' THEN 4 
       WHEN 'Thursday' THEN 5 
       WHEN 'Friday' THEN 6 
       WHEN 'Saturday' THEN 7 
     END 


Set @conInputDate = CONVERT(datetime,@InputDate,103) 
Set @outWeekending = DATEADD (dd, case when DatePart (DW, @conInputDate)[email protected] then 0 else -1 * DatePart (DW, @conInputDate) + 7 + @DayNumber end ,@conInputDate) 

/* ------------------------------Outputs------------------------------*/ 
If @CovertToInt = 'Yes' 
    Begin 
    PRINT convert(int, convert(varchar(10), @outWeekending, 112)) 
    END 

If @CovertToInt = 'No' 
    Begin 
    PRINT @outWeekending 
    END 

オラクルの試みは、これまで

Declare 
DayNumber Number(6); 
InputDate varchar2(10); 
conInputDate date; 
outweekending date; 

BEGIN 
DayNumber := 4; 
InputDate := '29/12/2016'; 
conInputdate := to_date(Inputdate, 'dd/mm/yyyy'); 
outweekending := DATEADD (dd, case when DatePart (DW, conInputDate)= DayNumber then 0 else -1 * DatePart (DW, conInputDate) + 7 + DayNumber end , conInputDate) 

dbms_output.put_line(outweekending); 
END 
+2

Upvotedを何とか音符文字を含むため。 –

+0

このコードのどの部分がOracleへの変換に問題を起こしていますか?これまでに行ったことと、Oracleで書き直すことができなかったコードを投稿してください。 – Aleksej

+0

@TimBiegeleisen(alt 14)SQL Developer:P – xQbert

答えて

1

これを試してみてください:

set serveroutput on; 
declare 
    day varchar(20) := 'Wednesday'; 
    dt date := to_date('29-12-2016','dd-mm-yyyy'); 
    next_dt date; 
    convert_to_int varchar(10) := 'No'; 
begin 
    next_dt := next_day(dt - 1, day); 
    if convert_to_int = 'Yes' then 
     dbms_output.put_line(to_char(next_dt,'yyyymmdd')); 
    else 
     dbms_output.put_line(next_dt); 
    end if; 
end; 
/
+1

これは私が望んだとおりに機能します。ありがとうございました。私が使用した関数を読み上げ、正しく理解しようとすると、私が使用したMS SQLよりもはるかにエレガントなようです。 –