如何在sql server第2部分中获取范围时间
关于这个问题 当我的输入值为18:00时,我想得到第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,
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。。。