2017-06-19 60 views
-2

我有一個表並且有一個列名作爲日期,數據類型是varchar(50)。 這樣的:兩個日期之間的結果將是錯誤的

dates 
------- 
16/06/2017 
25/05/2017 
03/06/2017 
17/06/2017 
03/06/2017 
12/06/2017 
05/06/2017 
06/06/2017 
15/06/2017 
13/06/2017 
29/04/2017 
21/05/2017 

我嘗試這樣做:

select s.date 
from add_vehicle a 
left join services s 
    ON a.vid=s.vid 
where date BETWEEN '01/04/2017' AND '19/06/2017' 

我只只得到6個月的數據。

如果我將'19/06/2017'更改爲'30/06/2017',那麼我會得到平衡結果。

什麼問題?如何解決它?

請引導我。

注:sqlfiddle不工作

+1

不要將日期存儲爲varchar。始終將其存儲在日期格式中。在此期間,您必須將字符串轉換爲日期。閱讀mysql文檔如何做到這一點 – Jens

+1

改變你的列數據類型爲DATE –

+0

我知道,但我應該怎麼做,如果我使用varchar意味着 –

回答

1

修復您的數據!數據庫支持日期/時間數據類型的原因。那是因爲你應該使用它們。你的情況,你可以這樣做:

UPDATE t 
SET dates = date_format(str_to_date(date, '%d-%m-%Y'), '%Y-%m-%d'); 

然後,更改數據類型:

ALTER TABLE t MODIFY dates date; 

瞧!你的代碼將開始工作。

不要編寫過於複雜的查詢來解決數據中的問題。修復數據。