MYSQL查询:在日期之间选择本地格式

时间:2015-01-16 00:58:38

标签: mysql date

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

  • 2014年11月16日
  • 2014年12月6日
  • 2014年4月1日
  • 2015年4月12日

我想在2014年1月1日至2014年12月31日期间选择日期转换的查询方式?

感谢..

2 个答案:

答案 0 :(得分:1)

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

要回答您的问题,在关闭之前,您可以使用STR_TO_DATE函数将字符串转换为DATE数据类型,然后进行比较。 MySQL将无法使用索引范围扫描操作,它需要在表中的每个翻转行上评估该函数。

举个例子:

 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是月份名称。

答案 1 :(得分:0)

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

但是,仍然有一个解决方案..您可以直接在查询中将varchar转换为日期:

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

但请不要使用此黑客并更改日期格式......

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