2017-01-25 3 views
0

以下のSQL Server構文がありますが、構文をOracleに移行しようとしています。私は、例えば、データの週を捕獲しようとしている:例えば1/16-1/22Oracle:Week of

:以下

FullDate  Week of (PreferredFormat): 
    1/1/2016   12/27-01/02 
    1/2/2016   12/27-01/02 
    1/3/2016   01/03-01/09 

は私のSQL Serverの構文は次のとおりです。

CONVERT(NVARCHAR(20), DATEADD(dd, -(DATEPART(dw, fulldate)-1), fulldate), 110) + '-' + 
CONVERT(NVARCHAR(20), DATEADD(dd, 7- (DATEPART(dw, fulldate)), fulldate), 110) AS 'WeekOf' 
----------------------------------------------- 
,CONVERT(NVARCHAR(05), DATEADD(dd, -(DATEPART(dw, fulldate)-1), fulldate), 10) + '-' + 
CONVERT(NVARCHAR(05), DATEADD(dd, 7- (DATEPART(dw, fulldate)), fulldate), 10) AS 'WeekOf_2' 
----------------------------------------------------- 
    ,REPLACE(replace(left(CONVERT(NVARCHAR(05), DATEADD(dd, -(DATEPART(dw, fulldate)-1), fulldate), 10),5),'0',''),'-','/') + '-' + 
    REPLACE(replace(left(CONVERT(NVARCHAR(05), DATEADD(dd, 7- (DATEPART(dw, fulldate)), fulldate), 10),5),'0',''),'-','/') AS 'WeekOf_3' 
+0

'TO_CHAR( 'IW'、fulldate)':https://docs.oracle.com/database/121/SQLRF/functions216.htm#SQLRF06129 –

+0

あなたは手の込んだことはできますか? 「1週間のデータをキャプチャしよう」とはどういう意味ですか? – BobC

+0

私はdate:1/1/2016を持っていて、今週の始めと終わりを捉えたい。上記のSQL Serverのように。 *編集の質問 – Toby

答えて

1

それあなたの週は日曜日から土曜日まで走っているようです。以下のソリューションはnext_day()機能を使用しています。その使用はセッションの日付言語に依存することに注意してください(残念ながら、関数のオプションパラメータではありません)。また、別のDB製品から移行する場合は、データ型DATEの列に日付を挿入する方がはるかに優れています。私は入力がdateデータ型の日付であり、nvarcharではないと仮定します。

with 
    inputs (dt) as (
     select to_date('1/1/2016', 'mm/dd/yyyy') from dual union all 
     select to_date('1/2/2016', 'mm/dd/yyyy') from dual union all 
     select to_date('1/3/2016', 'mm/dd/yyyy') from dual 
    ) 
-- end of test data (not part of the solution!); SQL query begins below this line 
select dt, 
     to_char(next_day(dt, 'Sunday') - 7, 'mm/dd-') || 
         to_char(next_day(dt, 'Sunday') - 1, 'mm/dd') as week_of 
from inputs 
; 

DT   WEEK_OF 
---------- ----------- 
01/01/2016 12/27-01/02 
01/02/2016 12/27-01/02 
01/03/2016 01/03-01/09 

3 rows selected.