2015-05-30 39 views
0

您好我有一个关于使用大于运算符时的日期不存储在默认mysql格式的问题。我有一个数据库,我用dd/mm/yyyy格式存储日期。我试图如何将它们存储为适当的MySQL格式,但过了一段时间后,我放弃了它。 现在我有一堆DD/MM/YYYY的日期表,我想选择比选定日期使用大于运算符时存储日期不存储默认mysql格式

select * from table where date>'25/05/2015' 

更大当我这样做的日期,​​我会得到这样

结果
 date 
    27/05/2015 
    28/04/2015 

我做错了什么?我能做些什么来解决它?

+0

您正在比较字符串。 –

+0

任何方式我可以得到这个工作? –

+0

查看STR_TO_DATE函数:https://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date –

回答

1

由于各种原因,最好将日期存储为MySQL DATE类型。两个主要原因是:

  1. 您不必经常将字符串转换为日期进行比较。
  2. 如果您有很多记录,并且您正在按日期进行定期搜索,则可以在日期字段中创建索引,然后您将获得优化的搜索。如果将索引字符串字段与您的索引一样,如果您正确格式化日期字符串,则会针对equals/not-equals进行优化,但不会针对范围或大于/小于进行优化,因为可以调用任何函数该字段将导致MySQL忽略该索引。

也就是说,如果你坚持使用当前格式,可以通过使用STR_TO_DATE函数将字符串转换为日期来进行比较。结果相比较而言,MySQL的日期文字:

SELECT * FROM table WHERE date > DATE '2015-05-25'; 

的日期在这个例子中的文字是ANSI标准,由MySQL和Oracle支持,但不是(至少现在还不是)由SQL Server。 MySQL也可以代表使用任何以下的字面日期:

  • '2015-05-25'
  • '20150525'
  • 20150525

有关日期和时间文字的更多信息,请参见here