我需要有一个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点收到数据。
答案 0 :(得分:1)
这是因为您比较了STRINGS,因此7:00 PM
介于7:00 AM
和8: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