0

我有一个表attendance_sheet,它有string_date一个 varchar 列。

这是在我的表格数据中。

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_datewhich is avarchar将更改为date?

有人对我的案子有想法吗?任何帮助将不胜感激,在此先感谢..

4

3 回答 3

0

Use strftime

SELECT * FROM attendance_sheet
where strftime(string_date,'%m/%d/%Y') between '2013-06-01' and '2013-31-21'
于 2013-05-20T11:47:10.723 回答
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() 函数不能很好地处理这些。

如果您能够更改数据库,请这样做。

于 2013-05-20T11:54:48.713 回答
0

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

于 2013-05-20T12:24:42.567 回答