在日期范围是varchar的特定日期范围之间选择数据

时间:2010-08-26 21:31:11

标签: sql sql-server tsql sql-server-2008

我有一个存储日期的varchar reporttime。不要问我为什么它是varchar

我这样做是为了获取两个日期之间的数据:

select rowid 
 from batchinfo 
where CONVERT(DATE, reporttime, 103) between '2010-07-01' and '2010-07-31'

并且无效

我做错了什么?

btw这是数据的样子:

rowid   datapath                                                        analysistime       reporttime
4695    F:\MassHunter\DATA\6897_Pan_1\QuantResults\6897_Pan_1.batch.bin  1/2/2010 8:13 AM   1/2/2010 8:25 AM
4696    F:\MassHunter\DATA\6897_Pan_2\QuantResults\6897_Pan2.batch.bin   1/2/2010 8:21 AM   1/2/2010 8:33 AM
4697    F:\MassHunter\DATA\6903_Pan_1\QuantResults\6903_P1.batch.bin     1/2/2010 9:41 AM   1/2/2010 9:46 AM
4698    F:\MassHunter\DATA\6903_Pan_2\QuantResults\6903_Pan2.batch.bin   1/2/2010 9:50 AM   1/2/2010 9:57 AM
4699    F:\MassHunter\DATA\6915_Pan_1\QuantResults\6915_pan1.batch.bin   1/2/2010 10:09 AM  1/2/2010 10:33 AM

3 个答案:

答案 0 :(得分:2)

首先,我假设您的样本数据不符合条件,是吗?

其次,您可能仍在进行字母数字比较,而不是日期时间比较。试试这个以强制进行日期时间比较。

select rowid 
from batchinfo 
where CONVERT(DATE, reporttime, 103)
    between cast('2010-07-01' as datetime) and CAST('2010-07-31' as datetime)

CAST运算符类似于CONVERT,也可以使用。

答案 1 :(得分:1)

CONVERT样式103是dd / mm / yyyy(欧洲格式),所以你的月和日翻了。请尝试使用101。

答案 2 :(得分:-1)

要查找不良数据,请尝试以下操作:

SELECT *
FROM batchinfo 
WHERE IsDate(reporttime) = 0