tsql按时间和时间选择查询

时间:2014-05-08 08:18:58

标签: tsql

我需要有一个select查询,其中查询按照这样的时间格式进行过滤。

从:上午7点 至:上午8:00

例如:

DECLARE @TimeFrom varchar(7)
DECLARE @TimeTo varchar(7)
DECLARE @StartDate varchar(10)
DECLARE @EndDate varchar(10)


SET @TimeFrom = '7:00 AM'
SET @TimeTo = '8:00 AM'
SET @StartDate = '05/07/2014'
SET @EndDate = '05/07/2014'

SELECT *
FROM [Call]
WHERE LTRIM(RIGHT(CONVERT(VARCHAR(20),StartTime,100),7)) BETWEEN @TimeFrom AND @TimeTo
and CONVERT(VARCHAR, StartTime, 101) = '05/07/2014'
AND SubDispositionID LIKE ('SA%')
ORDER BY StartTime ASC

此查询的问题是我也从晚上7点到晚上8点收到数据。

2 个答案:

答案 0 :(得分:1)

这是因为您比较了STRINGS,因此7:00 PM介于7:00 AM8:00 AM之间

我认为你应该避免上午\下午'并使用24小时表示法:

SET @TimeFrom = '07:00'
SET @TimeTo = '08:00'
....
WHERE CONVERT(VARCHAR(5),StartTime,108) BETWEEN @TimeFrom AND @TimeTo

以下是转换为VARCHAR(5)以从时间字符串中减少秒数。

答案 1 :(得分:0)

   DECLARE @TimeFrom varchar(7)
DECLARE @TimeTo varchar(7)
DECLARE @StartDate varchar(10)
DECLARE @EndDate varchar(10)


SET @TimeFrom = '7:00 AM'
SET @TimeTo = '8:00 AM'
SET @StartDate = '05/07/2014'
SET @EndDate = '05/07/2014'

SELECT *
FROM [Call]
WHERE CONVERT(varchar, StartTime, 108) BETWEEN (select CONVERT(varchar(8), cast(@TimeFrom as datetime), 108))
AND (select convert(varchar(8), cast(@TimeTo as datetime), 108))
and CONVERT(VARCHAR, StartTime, 101) = '05/07/2014'
AND SubDispositionID LIKE ('SA%')
ORDER BY StartTime ASC