如何检查 DateTime 是否在 String 时间之内?

How to check if DateTime lies within String times?

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

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

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

使用 SQL 服务器 2008 及更高版本,您可以将当前时间以及开始和结束时间(如 nvarchar)转换为 TIME 变量,然后进行检查:

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

使用函数DATEDIFF计算时差和分差。 这里 -> https://msdn.microsoft.com/en-us/library/ms189794.aspx

我不会使用 nvarchar,而是使用这样的东西:

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

使用条件可以是:

WHERE @CurDate BETWEEN @BeginTime AND @EndTime

此致,