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