2014-01-22 59 views
4

我試圖查詢數據庫之間有2個日期...問題是我查詢的列包含當前格式化爲這樣的日期「01/01/2014 「(dd/mm/yyyy),列類型爲VARCHAR。SQL查詢日期當類型是VARCHAR

此刻,我無法將列轉換爲日期類型。

基本上當我查詢表,因爲它沒有設定日期類型查詢不返回正確的行之間...

有其他人碰到過這樣的問題,是有什麼我可以在變更查詢?

$this->db->where('IssueDate >=', '02/12/2013'); 
$this->db->where('IssueDate <=', '22/01/2014'); 
$query = $this->db->get('MYTABLE'); 

謝謝你們。

+0

將值轉換爲查詢中的日期。 –

+0

任何人都可以幫助我嗎? – WebDevB

回答

5

的解決方案是使用str_to_date()

$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') >=", "'2013-12-92'"); 
$this->db->where("str_to_date(IssueDate, '%d/%m/%Y') <=", "'2014-01-22'"); 
$ 

您可能沒有對數據庫的任何控制。但是你可以控制自己的常量。您應該習慣ISO標準YYYY-MM-DD的這些常量 - 大多數數據庫都是明確的並且被正確接受。

+0

Gordan,謝謝你...我已經試過了,出於某種原因,我沒有收到任何東西... 這是我的: $ this-> db-> where('str_to_date(IssueDate ,'%d /%m /%Y')> =','02/12/2013'); – WebDevB

+0

@WebDevB。 。 。我不知道你的數據庫是否會將你的字符串解釋爲有效的日期。只需使用'2013-12-02'。 –

+0

@WebDevB用戶使用雙引號(where(「」)'方法,以及SQL查詢的單引號(在'str_to_date()'函數內部)。 –

0

我會建議創建於在轉換字符串日期列的數據庫,你必須爲以下格式的表格視圖... YYYYMMDD

該格式進行排序,並且可以很容易地與其他類似格式的日期比較 - 你甚至可以用它做日期算術。

請記住,視圖不會複製表或添加任何性能開銷。即使最初不需要對基礎表執行任何操作,通過視圖訪問任何表通常都是一個好主意 - 如果您以後發現需要執行它們,這將有所幫助。

0

使用BETWEEN子句與STR_TO_DATE()。檢查以下代碼: -

$wh = STR_TO_DATE(`IssueDate`,'%d/%m/%Y')." between '02/12/2013' and '22/01/2014'"; 
$this->db->where($wh); 

期待它會給你完美的結果。

+0

這似乎並不工作......我錯過了什麼? – WebDevB

+0

@WebDevB你有任何錯誤?你可以提供你的表格模式與記錄?那麼我可以爲你提供確切的解決方案 – ripa