【问题标题】:Listing Result by Date - showing at 8am - not midnight按日期列出结果 - 显示在上午 8 点 - 不是午夜
【发布时间】:2023-04-01 14:39:02
【问题描述】:

我有点放屁...按日期列出可用插槽的结果。它被设置为提前一周显示...但我希望它在早上 8 点之后显示最后一个结果,而不是在每晚午夜显示...有没有办法做到这一点?

下面的代码可以很好地显示结果,只是在每晚午夜显示它 - 我希望它在早上 8 点显示下一个结果......

    <cfset datelist = #DateAdd("d", tydef.numdays, todaydate)#>

   <cfquery name="list" datasource="#ds#">
    select * from shindates
    where sdate >= #createODBCDate(todaydate)# 
    and stime >= #createODBCDateTime(timehr)# 
    and sdate <= #createODBCDateTime(datelist)# 
    and typeid = '#ty.typeid#'
    order by sdate, stime
   </cfquery>

K - 我想我已经使用 cfif 对其进行了排序并切断了最后一天 - 然后在上午 9 点之后自行搜索最后一天 - 有效......但是如果有人有任何代码清理建议 - 我会接受他们……

这在下面有效

   <cfset datelist = #DateAdd("d", tydef.numdays, todaydate)#>

   <cfset sdatelist = #DateAdd("d", -1, datelist)#>

   <cfset stime = CreateTime(9,0,0)>

   <cfquery name="shinny" datasource="#ds#">
    select * from shindates
    where sdate >= <cfqueryparam cfsqltype="cf_sql_date" value="#todaydate#">
    and stime >= <cfqueryparam cfsqltype="cf_sql_time" value="#timehr#">
    and sdate <= <cfqueryparam cfsqltype="cf_sql_date" value="#sdatelist#"> 
    and typeid = '#ty.typeid#'
    order by sdate, stime
   </cfquery>

   <cfif #DatePart("h", timenow)# GTE #DatePart("h", stime)#>

   <cfquery name="lastday" datasource="#ds#">
    select * from shindates
    where sdate >= <cfqueryparam cfsqltype="cf_sql_date" value="#datelist#">
    and sdate <= <cfqueryparam cfsqltype="cf_sql_date" value="#datelist#"> 
    and typeid = '#ty.typeid#'
    order by sdate, stime
    </cfquery>

    </cfif>

【问题讨论】:

  • 三个变量的值是多少?
  • 相关列的数据类型是什么?你使用的是什么数据库?您还应该将该 SQL 参数化,而不是将您的值硬编码到您的语句中。你真的还在使用 ODBC 吗?
  • Todaydate - 是今天的日期,timehr 是今天的时间(当前时间)和 datelist - 是所需的天数(7) - 所以它会在今天的日期之后搜索任何内容,小时之后(确实不显示过期的)和接下来的 7 天......但我希望在上午 8 点之后显示最后一个 - 而不是在午夜
  • 这个问题的描述还是有点混乱......这将有助于发布一个小的数据转储。即查询中实际日期/时间的样本是什么,而您期望是什么?

标签: sql coldfusion coldfusion-9 cfml


【解决方案1】:

通过在我上面编辑的帖子中删除上面的日期列表 - 我能够做到这一点。

基本上我拉一周 - 切断最后一个日期。

显示不包括最后一天的星期。然后在上午 9 点之后 - 在上午 9 点用一个简单的 cfif 语句显示最后一天。

【讨论】:

    【解决方案2】:

    最可能的罪魁祸首是:

    and stime >= #createODBCDateTime(timehr)#
    

    CreateODBCDateTime() 创建一个日期时间对象。如果您只是提供一个时间,它将使用当前日期。

    解决方案是使用正确的数据类型。我假设你已经做了这样的事情:

    <cfset stime = CreateTime(8,0,0)>
    

    既然如此,您希望在查询中使用它。

     and stime >= <cfqueryparam cfsqltype="cf_sql_time" value="#stime#">
    

    出于各种原因,您希望对查询中的每个变量都使用查询参数。这将消除使用 CreateODBCDateTime() 的需要。

    【讨论】:

    • Thx - 但是 - 只是设置了一个上午 8 点的时间,然后在上午 8 点之后搜索它...... timehr 正在根据当前时间做同样的事情......我想要做什么 -直到上午 8 点之后才列出最后一个结果...但所有其他结果都显示...基本上在午夜 - 它显示下一个结果...投诉即将到来 - 人们不能在午夜注册 - 并想要那个结果显示在第二天早上 8 点 - 不是午夜...
    • 我在想的是 - 我可以减去 1 天 - 搜索 6 天并显示 6 天 - 然后在早上 8 点之后执行 cfif 搜索第 7 天的结果
    • 我误解了这个问题。您将不得不根据 Hour(now()) 执行一些条件逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多