我的mysql数据库tb_date(varchar 20):
我想在2014年1月1日至2014年12月31日期间选择日期转换的查询方式?
感谢..
答案 0 :(得分:1)
这是一种反模式,在VARCHAR列中存储日期值,而不是使用专门设计和实现的数据类型来存储日期值... DATE
,DATETIME
或TIMESTAMP
。
要回答您的问题,在关闭之前,您可以使用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),这是使用字符串格式的最大字符。