为什么MySQL选择日期不适用于不同月份

时间:2016-08-17 00:38:56

标签: php mysql sql-server date

当我还在学习PHP和MySQL时,我有一个非常古老的数据库。 如果我填充:

SELECT * FROM Jobs WHERE (date BETWEEN 'Aug.01 2016' AND 'Aug.31 2016')

我实际上可以填充行

Found rows: 4 Warnings: 0 Duration for 1 query: 0.000 sec.

但是一旦我改变我的月份(将范围从8月1日移动到7月1日):

SELECT * FROM Jobs WHERE (date BETWEEN 'Jul.01 2016' AND 'Aug.31 2016')

我什么都没有,所以7月1日〜8月31日的范围包括8月1日〜8月31日(来自前一个例子),应至少填充4行

Found rows: 0 Warnings: 0 Duration for 1 query: 0.016 sec.

有没有办法可以填充行,即使它们有不同的月份?

1 个答案:

答案 0 :(得分:3)

您需要先将日期字符串转换为有效日期:

SET @date := 'Aug.01 2016';

SELECT STR_TO_DATE(@date,'%M.%d %Y');

输出(yyyy-mm-dd): 2016-08-01

现在在查询中使用此选项来搜索日期介于2016-07-01 & 2016-08-31之间的结果。

SELECT 
*
FROM Jobs 
WHERE STR_TO_DATE(date,'%M.%d %Y') BETWEEN '2016-07-01' AND '2016-08-31';

注意:但是日期应存储在date数据类型列中。您将datatype列的date转换为date的时间很长。

为此,请按照以下步骤操作:

ALTER TABLE Jobs
ADD new_date_column date;

UPDATE Jobs 
SET new_date_column = STR_TO_DATE(date,'%M.%d %Y');

ALTER TABLE Jobs DROP COLUMN `date`;

ALTER TABLE Jobs CHANGE COLUMN `new_date_column` `date` date;

坚果壳中的步骤:

  1. Jobs类型的date表中添加新列。

  2. 现在使用date列中的值更新此新列     转换为有效日期后。

  3. 您不需要date列。所以放弃它。

  4. 现在将新创建的列重命名为date