2012-05-07 51 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