Sql 如何检查DateTime是否在字符串时间内?

Sql 如何检查DateTime是否在字符串时间内?,sql,sql-server-2008,Sql,Sql Server 2008,检查CurDate是否在给定时间内的最佳方法是什么?谢谢 使用SQL Server2008及更高版本,您可以将当前时间、开始时间和结束时间(如nvarchar)转换为time变量,然后执行检查: DECLARE @CurDate datetime, @Begintime nvarchar(10), @Endtime nvarchar(10) SELECT @CurDate = GETDATE() SELECT @Begintime = '9:00 AM' SELECT @End

检查CurDate是否在给定时间内的最佳方法是什么?谢谢

使用SQL Server2008及更高版本,您可以将当前时间、开始时间和结束时间(如
nvarchar
)转换为
time
变量,然后执行检查:

DECLARE @CurDate datetime,
    @Begintime nvarchar(10),
    @Endtime nvarchar(10)

SELECT @CurDate = GETDATE()
SELECT @Begintime = '9:00 AM'
SELECT @Endtime = '5:00 PM'

使用函数
DATEDIFF
计算小时和分钟差。 此处->

我不会使用
nvarchar
,而是使用如下内容:

DECLARE @CurrTime TIME = CAST(@CurDate AS TIME)
DECLARE @TimeFrom TIME = CAST(@Begintime AS TIME)
DECLARE @TimeTo TIME = CAST(@Endtime AS TIME)

SELECT 
    @CurrTime, @TimeFrom, @TimeTo,
    CASE 
        WHEN @CurrTime BETWEEN @TimeFrom AND @TimeTo THEN 'Yes!'
        ELSE 'No, sorry'
    END
要使用的条件可以是:

@BeginTime = DATEADD(hour, 9, CONVERT(datetime,CONVERT(date,getdate()))) 
@EndTime = DATEADD(hour, 17, CONVERT(datetime,CONVERT(date,getdate())))

致以最诚挚的问候,

问题:如果TimeFrom='8:00pm'和TimeTo='4:00am',此代码仍然有效吗?(似乎没有)@user1026110:不,它不能工作-因为你只有时间,晚上8点到凌晨4点之间有点“不可能”-在这种情况下,你必须开始使用完整的日期和时间。@user1026110:在这种情况下,你必须在@CurrTime>@TimeFrom或@CurrTime<@TimeTo或类似的地方写
,我认为从下午6:00开始,这就不能完全起作用了,而忽略了它也是>TimeTo的事实。也许在这种情况下,我可以将TimeFrom和TimeTo值交换为NOT BETWEEN?我的想法是8:00 PM和4:00 AM之间等于NOT BETWEEN 4:00 AM和8:00 PM之间
WHERE @CurDate BETWEEN @BeginTime AND @EndTime