2014-01-15 30 views
1

我已经将日期作为字符串存储在我的数据库中。我知道这并不好,但是在我接管之前以及日期被存储为字符串的情况下,项目已经发展了一半,所以我继续以同样的方式。选择比特定日期更短的日期

现在我想从表中选择日期大于特定日期的日期。

我尝试下面的查询

SELECT 
* 
FROM 
dates 
where 
STR_TO_DATE(date, '%Y-%m-%d') > "2014-01-01" 

,但它不是只返回更大的价值。 请帮我解决问题。

Demo

+0

抱歉伙计,PLZ检查更新演示 – user2979046

+0

为什么日期字符串 – Strawberry

回答

3

您的日期不在YYYY-MM-DD格式。使用正确的格式!

SELECT * 
FROM dates 
where STR_TO_DATE(date, '%m-%d-%Y') > date('2014-01-01') 

如果打算将日期存储为字符串,那么最好的方法是使用ISO格式YYYY-MM-DD。

您应该阅读关于str_to_date()here)的文档。

+0

STR_TO_DATE没有生成日期?所以格式不相关? – Ben

+0

谢谢你,我以为我们想在STR_TO_DATE()函数中给出想要的格式。并感谢你的建议。我将尽力在将来 – user2979046

+0

@Ben中实现它。 。 。日期可以以多种不同格式存储在一个字符串中 - 例如“2014-01-15”或“15 -01-2014”或“01Jan2014”或“1/15/14”。需要格式来告诉功能如何进行转换。对于这个特定的问题,日期实际上可能是1月5日和6日或5月1日和6月1日 - 取决于格式。 –

0

什么类型的date?对于SQL中的字符串,我宁愿使用'而不使用"。让我们假设日期是VARCHARTEXT场(取决于数据库您正在使用):

SELECT * 
    FROM dates 
WHERE STR_TO_DATE(date, '%Y-%m-%d') > STR_TO_DATE('2014-01-01', '%Y-%m-%d') 

如果date是一个真正的DATE

SELECT * 
    FROM dates 
WHERE trim(date) > STR_TO_DATE('2014-01-01', '%Y-%m-%d') 

,或者你只是把它转换成数字格式date_format(date,'%Y%m%d') > 20140101

0

将所有内容转换为日期并且应该没问题。现在你正在比较日期和字符串。

+0

将所有东西都转换成日期真的是一个巨大的过程,因为我需要根据那个改变所有的旧代码 – user2979046

相关问题