2013-05-20 34 views
0

我有一个表attendance_sheet,它有一列是一个varchar的string_date在varchar之间选择作为日期返回null

这是我的表格数据。

id | string_date | pname 
1 | '06/03/2013' | 'sam' 
2 | '08/23/2013' | 'sd' 
3 | '11/26/2013' | 'rt' 

我尝试使用此范围内进行查询。

SELECT * FROM attendance_sheet 
where string_date between '06/01/2013' and '12/31/2013' 

则返回的数据。但是,当我尝试使用这个

SELECT * FROM attendance_sheet 
where string_date between '06/01/2013' and '03/31/2014' 

查询它并没有返回任何结果...

它可以是固定的,没有任何变化列类型,例如string_date这是一个varchar将更改为date

有没有人有关于我的情况的想法? 任何帮助将不胜感激,在此先感谢..

+0

你应该编辑你的旧答案,而不是两次问同一件事。 –

+0

可能重复[选择日期没有时间](http://stackoverflow.com/questions/16648209/select-where-date-without-time) –

回答

0

使用strftime

SELECT * FROM attendance_sheet 
where strftime(string_date,'%m/%d/%Y') between '2013-06-01' and '2013-31-21' 
+0

谢谢你的答案juergen但我得到了这个错误'没有这样的功能: STR_TO_DATE'在我的sqlite浏览器 – gadss

+0

我更新了我的答案。 –

0

的原因是:

where string_date between '06/01/2013' and '03/31/2014' 

不返回任何结果是, '06' 是大于“ 03' 。这与使用此过滤器基本相同。

where SomeField between 'b' and 'a' 

此问题的原因是设计不佳的数据库。将日期存储为字符串是一个糟糕的主意。 Juergen已经向你展示了一个可以帮助你的函数,但是由于你的字段是varchar,所以像'fred','barney'和'dino'这样的值是完全有效的。 Str_to_date()函数不适用于那些。

如果您可以更改数据库,请这样做。

0

为了能够正确地进行字符串比较,必须更改数据库,以便日期中最重要的字段最先显示,即使用格式yyyy-mm-dd