やじゅ@アプリケーション・ラボ わんくま支局

目次

Blog 利用状況

ニュース

プロフィール

MSMVP

日付期間の重複チェック

業務アプリケーションでも、予約管理する機能を作成するときがあります。
その時に、予約した日付期間が重複しているかチェックするわけですが、

日付期間の重複チェックを、複雑に記述される方を見られます。
しかし、これには定石のチェック方法があります。
比較開始日付 <= 対象終了日付 AND 比較終了日付 >= 対象開始日付
※条件に、=が成り立っていいかどうかは仕様によります。

Oracleなら「OverLaps oracle」のキーワードで探すといいでしょう。

例では日付にしてますが、Date型を使ってますので時間でも同様です。

        '日付が重複するパターンには、以下の4通りがあります。
        '    |-- 日付 --|
        ' ① |--------|
        ' ②    |--------|
        ' ③       |--------|
        ' ④   |------------|

        '対象期間 2008/05/05 ~ 2008/06/15 
        '期間①  2008/04/01 ~ 2008/05/31
        '期間②  2006/05/10 ~ 2006/06/20
        '期間③  2006/06/15 ~ 2006/07/10
        '期間④  2006/05/10 ~ 2006/06/30

        '重複しない以下のパターンでは、上の条件式は成立しません。
        '       |-- 日付 --|
        ' ① |-----|
        ' ②            |-----|

        '対象期間 2008/05/05 ~ 2008/06/15
        '期間①  2008/04/01 ~ 2008/05/04
        '期間②  2006/06/16 ~ 2006/06/30

Dim dtTable As New DataTable
Dim drRow As DataRow = Nothing

dtTable.Columns.Add("START_DATE", GetType(Date))
dtTable.Columns.Add("END_DATE", GetType(Date))
drRow = dtTable.NewRow()
drRow("START_DATE") = CDate("2008/04/01")
drRow("END_DATE") = CDate("2008/05/31")
dtTable.Rows.Add(drRow)
drRow = dtTable.NewRow()
drRow("START_DATE") = CDate("2008/05/10")
drRow("END_DATE") = CDate("2008/06/20")
dtTable.Rows.Add(drRow)
drRow = dtTable.NewRow()
drRow("START_DATE") = CDate("2008/06/15")
drRow("END_DATE") = CDate("2008/07/10")
dtTable.Rows.Add(drRow)
drRow = dtTable.NewRow()
drRow("START_DATE") = CDate("2008/05/10")
drRow("END_DATE") = CDate("2008/06/30")
dtTable.Rows.Add(drRow)
drRow = dtTable.NewRow()
drRow("START_DATE") = CDate("2008/04/01")
drRow("END_DATE") = CDate("2008/05/04")
dtTable.Rows.Add(drRow)
drRow = dtTable.NewRow()
drRow("START_DATE") = CDate("2008/06/16")
drRow("END_DATE") = CDate("2008/06/30")
dtTable.Rows.Add(drRow)

'重複している場合の抽出条件
'比較開始日付 <= 対象終了日付 AND 比較終了日付 >= 対象開始日付
Dim dv As DataView
dv = dtTable.DefaultView
dv.RowFilter = "START_DATE <= #2008/06/15# AND END_DATE >= #2008/05/05#"

If dv.Count > 0 Then
 Console.WriteLine(dv.Count & "件の期間が重複しています。")
End If

'重複していない場合の抽出条件
'比較開始日付 > 対象終了日付 OR 比較終了日付 < 対象開始日付
dv.RowFilter = "START_DATE > #2008/06/15# OR END_DATE < #2008/05/05#"

If dv.Count > 0 Then
 Console.WriteLine(dv.Count & "件の期間が重複していません。")
End If

投稿日時 : 2008年12月31日 2:43

コメントを追加

# ivermectin 4 http://stromectolabc.com/
ivermectin 3 mg 2022/02/08 9:40 Busjdhj

ivermectin 4 http://stromectolabc.com/
ivermectin 3 mg

# doxycycline 50 mg https://doxycyline1st.com/
buy generic doxycycline 2022/02/26 8:30 Doxycycline

doxycycline 50 mg https://doxycyline1st.com/
buy generic doxycycline

# paxlivid https://paxlovid.best/
paxlivid 2022/09/08 7:45 Paxlovid

paxlivid https://paxlovid.best/
paxlivid

# ed pills comparison https://erectiledysfunctionpills.shop/ 2022/10/14 22:51 Erectile

ed pills comparison https://erectiledysfunctionpills.shop/

# prednisone capsules https://prednisone20mg.site/
prednisone tablet 100 mg 2022/11/15 18:00 Prednisone

prednisone capsules https://prednisone20mg.site/
prednisone tablet 100 mg

# Get warning information here. Prescription Drug Information, Interactions & Side.
https://edonlinefast.com
Get here. Read now. 2023/02/18 10:37 EdOnline

Get warning information here. Prescription Drug Information, Interactions & Side.
https://edonlinefast.com
Get here. Read now.

# farmacia senza ricetta recensioni https://viasenzaricetta.com/# 2023/04/16 9:14 ViaSenza

farmacia senza ricetta recensioni https://viasenzaricetta.com/#

# where to get cytotec pills - https://cytotecsale.pro/# 2023/04/28 23:34 Cytotec

where to get cytotec pills - https://cytotecsale.pro/#

# best ed pill https://edpills.ink/# - buy ed pills online 2023/07/26 20:08 EdPills

best ed pill https://edpills.ink/# - buy ed pills online

# order doxycycline https://doxycycline.forum/ doxycycline 200 mg 2023/11/25 9:10 Doxycycline

order doxycycline https://doxycycline.forum/ doxycycline 200 mg

# buying prednisone mexico https://prednisone.bid/ prednisone 20mg prices 2023/12/27 6:56 Prednisone

buying prednisone mexico https://prednisone.bid/ prednisone 20mg prices

# eva elfie new videos https://evaelfie.site/ eva elfie videos
2024/03/07 4:40 EvaElfie

eva elfie new videos https://evaelfie.site/ eva elfie videos

# sweet bonanza indir https://sweetbonanza.bid/ - slot oyunlari
2024/03/27 22:12 Bonanzaj

sweet bonanza indir https://sweetbonanza.bid/ - slot oyunlari

# pin up indir: https://pinupgiris.fun/ pin up
2024/03/28 7:30 GirisUp

pin up indir: https://pinupgiris.fun/ pin up

# buy cytotec in usa https://cytotec.club/ cytotec pills buy online 2024/04/27 21:53 Cytotec

buy cytotec in usa https://cytotec.club/ cytotec pills buy online

タイトル
名前
URL
コメント