我有一个存储日期的varchar reporttime。不要问我为什么是varchar
我这样做是为了获取两个日期之间的数据:
select rowid
from batchinfo
where CONVERT(DATE, reporttime, 103) between '2010-07-01' and '2010-07-31'而且它不起作用
我做错了什么?
顺便说一句,数据是这样的:
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发布于 2010-08-27 05:38:54
首先,我假设你的样本数据不符合条件,对吗?
其次,您可能仍在进行字母数字比较,而不是日期时间比较。尝试执行此操作以强制执行日期时间比较。
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,也可以使用。
发布于 2010-08-27 05:43:19
转换样式103是dd/mm/yyyy (欧洲格式),所以你可以颠倒你的月份和日期。请尝试使用101。
发布于 2010-08-27 12:06:00
要查找您的坏数据,请尝试以下命令:
SELECT *
FROM batchinfo
WHERE IsDate(reporttime) = 0https://stackoverflow.com/questions/3579695
复制相似问题