我有一个存储日期的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
答案 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