5

2 つの日付フィールド間の平日の日数を計算する方法を知っている人はいますか? 私はオラクルのSQL開発者を使用しています。複数の開始日と終了日の間の平日の平均を見つける必要があります。したがって、平均化できるように、各レコードの日数を取得する必要があります。SELECTこれは、クエリの一部で 1 行として実行できるものですか?

4

3 に答える 3

11

CONNECT BYこの回答はニコラスの回答に似ていますが、日付のリストをスピンアウトするにはa を含むサブクエリが必要なので、これは驚くべきことではありません。曜日を確認しながら日付を数えることができます。ここでの違いは、結果の各行で平日のカウント値を取得する方法を示していることです。

SELECT
  FromDate,
  ThruDate,
  (SELECT COUNT(*)
     FROM DUAL
     WHERE TO_CHAR(FromDate + LEVEL - 1, 'DY') NOT IN ('SAT', 'SUN')
     CONNECT BY LEVEL <= ThruDate - FromDate + 1
  ) AS Weekday_Count
FROM myTable

カウントは包括的です。つまり、 と が含まれFromDateますThruDate。このクエリは、日付に時間コンポーネントがないことを前提としています。その場合はTRUNC、サブクエリの日付列が必要になります。

于 2013-08-30T14:01:32.287 に答える
3

次の方法で実行できます。

この例では、 とが文字列リテラルであるstart_date='01.08.2013'との間の平日の日数を知りたいとしましょう。とがデータ型の場合、 関数は必要ありません。end_date='04.08.2013'start_dateend_datestart_dateend_datedateTO_DATE()

select count(*) as num_of_weekdays
  from ( select level as dnum
           from dual
        connect by (to_date(end_date, 'dd.mm.yyyy') - 
                    to_date(start_date, 'dd.mm.yyyy') + 1) - level >= 0) s
where to_char(sysdate + dnum, 'DY', 
              'NLS_DATE_LANGUAGE=AMERICAN') not in ('SUN', 'SAT')

結果:

num_of_weekdays
--------------
2 
于 2013-08-30T13:58:05.200 に答える