MYSQL 查询:select 日期与本地格式之间
MYSQL query: select between date with local format
我的 mysql 数据库 tb_date (varchar 20):
- 2014 年 11 月 16 日
- 2014 年 12 月 6 日
- 2014 年 4 月 1 日
- 2015 年 4 月 12 日
我想select从2014年1月1日到2014年12月31日,查询日期转换如何?
谢谢..
这是一种反模式,将日期值存储在 VARCHAR 列中,而不是使用专门为存储日期值而设计和实现的数据类型...DATE
、DATETIME
或 TIMESTAMP
.
要回答你的问题,在关闭之前,你可以使用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),这是使用您的字符串格式可能的最大字符数。
我的 mysql 数据库 tb_date (varchar 20):
- 2014 年 11 月 16 日
- 2014 年 12 月 6 日
- 2014 年 4 月 1 日
- 2015 年 4 月 12 日
我想select从2014年1月1日到2014年12月31日,查询日期转换如何?
谢谢..
这是一种反模式,将日期值存储在 VARCHAR 列中,而不是使用专门为存储日期值而设计和实现的数据类型...DATE
、DATETIME
或 TIMESTAMP
.
要回答你的问题,在关闭之前,你可以使用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),这是使用您的字符串格式可能的最大字符数。