簡體   English   中英

ColdFusion 9-SQL語句-布爾邏輯

[英]ColdFusion 9 - SQL Statement - Boolean Logic

我已經把這個堵了。 這將是一個簡單的小數學邏輯問題。 但是對於我的一生,我無法使其正常運行。

試圖避免在預訂系統中重復預訂的東西。 當前代碼...

  and schdate = #createODBCDate(schdate)#
  and ( schstart >= #createODBCTime(stime)# and 
        actend <= #createODBCTime(actend)# 
      )

基本上嘗試進行檢查-如果說開始時間是日期的下午2點,結束於下午3點...我需要檢查我是否要預訂重疊的東西...說要在2:15 pm預訂...應該踢開支票說-沖突。

所以認為這是數學邏輯問題-而不是ColdFusion問題...今天只是一個大腦...

感謝潛在客戶-我想我可能已經知道了-仍在測試中...以下內容似乎有效。 開發鏈接提供了見解。

     and schdate  = #createODBCDate(schdate)#
     and schstart < #createODBCTime(actend)# 
     and actend   > #createODBCTime(stime)#

更新:

下面原始查詢的Merle_the_Pearl修訂版更加直觀。 基本上顛倒比較:

WHERE   DateColumn = #RequestedDate#
AND     StartTimeColumn < #RequestedEndTime#
AND     EndTimeColumn > #RequestedStartTime#

我記得在該主題上看到了一個很棒的話題: 查找重疊的日期 (ASCII插圖很不錯:)。 假設您的預訂不會持續數天,那么一段時間也可以正常工作。

通常的方法是檢查每種類型的沖突:

  • 重疊:即要求上午9點至10點,但已經有9點30分至11點的預約
  • 屬於:即請求的時間是10-11AM,但是已經有9-12PM的預訂
  • 包含:即請求的時間為12-5PM,但現有的保留時間為2-3PM

該鏈接提到了一種更優雅的方法。 本質上,它將所有這些步驟簡化為一個過濾器。

    WHERE FE >= SD and FS <= ED

如果找到匹配項,則說明存在沖突。 翻譯應該看起來像這樣(未經測試)。

 SELECT  Columns
 FROM    SomeTable
 WHERE   #RequestedEndTime# >= StartTimeColumn
 AND     #RequestedStartTime# <= EndTimeColumn
 AND     DateColumn = #RequestedDate#

注意:為了清楚起見,我特意省略了cfqueryparam 顯然,我建議您在實際查詢中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM