2013-05-20 47 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