MYSQL 查询:select 日期与本地格式之间

MYSQL query: select between date with local format

我的 mysql 数据库 tb_date (varchar 20):

我想select从2014年1月1日到2014年12月31日,查询日期转换如何?

谢谢..

这是一种反模式,将日期值存储在 VARCHAR 列中,而不是使用专门为存储日期值而设计和实现的数据类型...DATEDATETIMETIMESTAMP.

要回答你的问题,在关闭之前,你可以使用STR_TO_DATE函数将字符串转换为DATE数据类型,然后进行比较。 MySQL 将无法使用索引范围扫描操作,它需要在 table.

中的每个翻转行上评估该函数

举个例子:

 SELECT t.mycol
   FROM mytable t
  WHERE STR_TO_DATE(t.mycol,'%d %M %Y') >= '2014-01-01'
    AND STR_TO_DATE(t.mycol,'%d %M %Y') <  '2015-01-01'

我们需要查看 MySQL 参考手册以验证 '%M' 是完整月份名称的正确格式说明符...

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format

是的,看来我猜对了。 M 是月份名称。

正如我已经评论过的,您应该将日期存储为时间戳或数据格式,然后您就可以简单地进行比较。

不过,还是有解决办法的。您可以直接在查询中将 varchar 转换为日期:

select * from yourTable
  where (str_to_date(tb_date, '%d %M %Y') between '2014-01-01' and '2014-12-31');

但请不要使用此 hack 并更改您的日期格式...

Edit :如果您真的愿意使用 varchar 来存储您的日期,请将其更改为 varchar(17),这是使用您的字符串格式可能的最大字符数。