SQL选择是否在时间范围内显示某些列的特定时间

时间:2017-05-15 14:46:36

标签: sql

在asp.net应用程序上运行网格视图,我希望它仅在特定时间内显示某些列,

 `IF ((datepart(hh, getdate())) between 5 and 18 
  SELECT 
  ,[Hour5],[Hour6],[Hour7],[Hour8],[Hour9],[Hour10],[Hour11],[Hour12],
   [Hour13],[Hour14],[Hour15],[Hour16],[Hour17],[Hour18]

  FROM [DB]    

   IF ((datepart(hh, getdate())) between 18 and 5
    SELECT 
      ,[Hour18],[Hour19],[Hour20],[Hour21],[Hour22],[Hour23],[Hour0],
 [Hour1],[Hour2],[Hour3],[Hour4],[Hour5]
 FROM [DB]     ` 

1 个答案:

答案 0 :(得分:0)

表达式datepart(hh, getdate()) between 18 and 5将始终为false,因为它等同于datepart(hh, getdate()) >= 18 and datepart(hh, getdate()) <= 5。您可以尝试将其重写为datepart(hh, getdate()) <= 5 or datepart(hh, getdate()) >= 18 - 请注意or代替上一个示例中的and

但是,我怀疑你在这里也有另一个逻辑错误。现在,如果getdate()介于05:00:00和05:59:59之间,或者getdate()介于18:00:00和18:59:59之间,那么会得到满足。这是你的意图吗?如果没有,您可以考虑以这种方式构建查询:

if datepart(hh, getdate()) between 5 and 18
    select /*stuff*/;
else
    select /*other stuff*/;