2012-05-07 52 views
1

我有我的日期字段在Mysql這是存儲爲char如下050712現在我想顯示在數據庫中可用的結果是少於這個日期。我寫如下Mysql查詢幫助顯示結果小於給定日期

條件應該

select * from tblFedACHRDFI where date_format(changedate,'%m/%d/%Y')> 05/08/12; 

這顯示其可用的所有記錄失敗,但我不需要,我想只顯示時的日期爲05/06/12,這意味着

真條件

select * from tblFedACHRDFI where date_format(changedate,'%m/%d/%Y')> 05/06/12; 

同樣在Sqlserver工作對我來說,當我寫如下

紀錄沒有得到顯示這是真的按我的要求

select * from tblFedACHRDFI where 
CONVERT(datetime,(SUBSTRING(ChangeDate,1,2)+'/' 
+SUBSTRING(ChangeDate,3,2)+'/'+dbo.Years 
(SUBSTRING(ChangeDate,5,2))+SUBSTRING(ChangeDate,5,2)))> 
'05/08/2012' 

所以任何一個可以幫助我在哪裏出了錯在MySql聲明..

+0

這是在MySQL中存儲日期的不好方法。如果可以,切換到'DATE'而不是'CHAR'。 –

回答

3

一個MySQL的日期應爲YYYY-MM-DD ,列類型應該是DATE。

如果您希望以任何其他方式存儲日期(例如,您在此處執行CHAR(6)),則每次使用日期時都必須使用轉換。這比較慢,使用更多CPU,並且可能會失敗,因爲您可以在CHAR字段中存儲無效值。

但是它確實有效。使用STR_TO_DATE函數將您的CHAR列轉換爲適當的日期。現在,您可以將它與適當的日期進行比較,使用INTERVAL函數,整個shebang:

select * 
from tblFedACHRDFI 
where str_to_date(changedate,'%m%d%Y') > "2012-08-05"; 
+0

但我無法獲取記錄如果我輸入日期爲'2012-06-05' – Dotnet

+0

你是什麼意思,'如果我輸入日期爲2012-06-05'?你的'changedate'是CHAR(6),對嗎?每個月,每天,每年存儲2位數字?那麼,請使用STR_TO_DATE讓MySQL將其轉換爲適當的DATE,然後您可以使用適當的日期來滿足您的需求(在本例中,晚於8月5日)。 – Konerak

+0

我的記錄只可用於'may 07 2012',所以我的記錄應該顯示如果我輸入'may 06 2012'即'2012-06-05' – Dotnet