如何在sql server第2部分中获取范围时间

如何在sql server第2部分中获取范围时间,sql,sql-server,Sql,Sql Server,关于这个问题 当我的输入值为18:00时,我想得到第2班 以下是上述帖子中的示例: declare @param_value_from_hour varchar(20) = '18:00' ;with myTable as ( select * from ( values (1, '7:00:00', '18:00:00') , (2, '18:00:00', '7:00:00') ) t(Shift,

关于这个问题

当我的输入值为18:00时,我想得到第2班

以下是上述帖子中的示例:

declare @param_value_from_hour varchar(20) = '18:00'
;with myTable as (
    select * 
    from (
        values 
            (1, '7:00:00', '18:00:00')
            , (2, '18:00:00', '7:00:00')
    ) t(Shift, From_Hour, To_Hour)
)

select
    * 
from
    myTable
where
   (@param_value_from_hour between From_Hour and To_Hour) or
   (To_Hour < From_Hour and
       (@param_value_from_hour < To_Hour or
        From_Hour < @param_value_from_hour)
   )

但是有了这个解决方案,我就得到了第1班,有人能帮我解决我这里缺少的问题吗谢谢你

poli,你必须把myTable作为CTE吗??这里的问题是时间列的数据类型。。请检查可提及数据类型的临时表/类似方法是否适合您

WHERE
  (
        @param_value_from_hour >= From_Hour
    AND @param_value_from_hour <  To_Hour
  )
  OR
  (
    From_Hour > To_Hour
    AND
    (
         @param_value_from_hour >= From_Hour
      OR @param_value_from_hour <  To_Hour
    )
  )
declare @param_value_from_hour varchar(20) = '18:00'
declare @myTable Table (Shift int, From_Hour time, To_Hour time)

insert into @myTable (Shift, From_Hour, To_Hour) values (1, '7:00:00', '18:00:00')
insert into @myTable (Shift, From_Hour, To_Hour) values (2, '18:00:00', '7:00:00')

 Select * from @myTable
where
   (@param_value_from_hour >= From_Hour and @param_value_from_hour < To_Hour) or
   (To_Hour < From_Hour and
   (@param_value_from_hour < To_Hour or
    From_Hour <= @param_value_from_hour)
   )

重复这里的例子,将其视为一个全新的问题,不要期望人们按照链接阅读问题,然后返回写答案,然后按照链接检查某些内容,等等,等等。在这一个问题中保留我们需要知道的所有信息。好的,谢谢你的建议谢谢@MatBailie,但仍然得到了相同的结果。请告诉我你使用的是时间数据类型,而不是VARCHAR数据类型!?啊,是的,我使用的是时间数据类型,对不起,我忘了提及that@Poli-那是你的测试错了。使用时间数据类型这很好,但是基于CTE的测试使用字符串。尝试使用CAST'18:00'作为时间,CAST7:00:00作为时间,等等。请参阅上面评论中的我的链接。在您的示例中,使用“18:00”是一个使用字符串的问题,它小于“18:00:00”。它也小于“7:00:00”,这是测试中的另一个不一致性;如果您使用的是字符串,则应该是“07:00:00”。是的,我现在测试并且它工作正常,而且我仍然使用其他可能性进行测试,非常感谢您的宝贵响应。中间仍然是一个问题,因为参数18:00也将不正确地匹配第1行。啊…抱歉。。。没有检查到他只需要换班2…换个地方怎么样?我已经编辑了第一个where条件,其余的都可以。假设OP的数据不是VARCHAR,因为如果它是VARCHAR,则格式化会有所不同。”使用字符串时,18:00小于18:00:00和7:00:00。。。