首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion 9- SQL语句-布尔逻辑

ColdFusion 9- SQL语句-布尔逻辑
EN

Stack Overflow用户
提问于 2014-10-08 20:47:15
回答 1查看 73关注 0票数 1

我对这件事了如指掌。这将是一个简单的数学逻辑问题。但对于我的生活,我无法使它正常运作。

尽量避免预订系统中的双重预订。当前代码..。

代码语言:javascript
复制
  and schdate = #createODBCDate(schdate)#
  and ( schstart >= #createODBCTime(stime)# and 
        actend <= #createODBCTime(actend)# 
      )

基本上试着做一个检查-如果说开始时间是下午2点在日期和结束在下午3点.我需要检查一下我是否想订一些重叠的东西.比如要在下午2点15分预定.它应该用查证的话-冲突来启动。

所以认为这是数学逻辑-不是ColdFusion的事.今天只是空中的大脑..。

谢谢-我想我可能已经猜到了-还在测试.下面的内容似乎很有效。Dev链接提供了洞察力。

代码语言:javascript
复制
     and schdate  = #createODBCDate(schdate)#
     and schstart < #createODBCTime(actend)# 
     and actend   > #createODBCTime(stime)#
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-08 21:23:42

更新:

下面的原始查询的珀尔修正更直观一些。从根本上来说,比较是相反的:

代码语言:javascript
复制
WHERE   DateColumn = #RequestedDate#
AND     StartTimeColumn < #RequestedEndTime#
AND     EndTimeColumn > #RequestedStartTime#

我记得在这个主题上看到了一条很棒的帖子:找出重叠日期。( ASCII的插图是一个很好的触摸:)。假设您的预订不跨越多天,它也应该工作良好的时间。

通常的方法是检查每种类型的冲突:

  • 重叠:(要求上午9点至10点),但已经预订了上午9点30至11点
  • 属于:(要求的时间为上午10点至11点),但已经预订了晚上9点至12点
  • 包括:(要求的时间为下午12点至5点),但现有的预订时间是下午2点至3点

该链接提到了一种更优雅的方法。本质上,它将所有这些步骤简化为一个单一的过滤器。

代码语言:javascript
复制
    WHERE FE >= SD and FS <= ED

如果它找到了匹配,你就知道有冲突。翻译应该像这样(未经测试)。

代码语言:javascript
复制
 SELECT  Columns
 FROM    SomeTable
 WHERE   #RequestedEndTime# >= StartTimeColumn
 AND     #RequestedStartTime# <= EndTimeColumn
 AND     DateColumn = #RequestedDate#

注:,为了清晰起见,我故意省略了cfqueryparam。显然,我建议在实际查询中使用它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26266152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档