【问题标题】:Create mysql date range创建mysql日期范围
【发布时间】:2011-01-19 14:55:48
【问题描述】:

似乎找不到我正在寻找的答案。

我想在表格中创建从 2010-11-01 到 2015-01-01 的日期范围。

2010-11-01 2010-11-02 2010-11-03 等等……

列数据类型为“日期”

谢谢

【问题讨论】:

标签: mysql date


【解决方案1】:
DROP PROCEDURE IF EXISTS datespopulate;
DELIMITER |
CREATE PROCEDURE datespopulate(dateStart DATE, dateEnd DATE)
BEGIN
  WHILE dateStart <= dateEnd DO
    INSERT INTO datetable (d) VALUES (dateStart);
    SET dateStart = date_add(dateStart, INTERVAL 1 DAY);
  END WHILE;
END;
|
DELIMITER ;
CALL datespopulate('2010-11-01','2015-01-01');

请注意,我将表命名为“datetable”,列命名为“d”,但您可以随意更改。对我来说工作正常,如果您遇到问题,请告诉我。

感谢乔让球滚动起来。 ;-)

【讨论】:

  • @Joe:没问题,很高兴为您提供帮助! ;-)
【解决方案2】:

你当然可以采取蛮力方法。

set @d = cast('2010-11-01' as date);

while (@d < '2015-01-02') do
    insert into YourTable 
        (YourColumn)
        values
        (@d);

    set @d = date_add(@d, interval 1 day);
end while;

【讨论】:

  • @Joe: DECLARE is permitted only inside a BEGIN ... END compound statement and must be at its start, before any other statements. (根据DECLARE syntax——认为它需要是一个程序,尽管你在正确的轨道上)
  • @Brad:谢谢。编辑答案。
  • @Joe:在 while 条件下我仍然遇到语法错误。这对你有用吗?
  • @Brad:我现在没有地方测试。正如您之前指出的,这可能需要封装在 proc 中。
  • @Joe/@mrlayance:我正在努力。发布此答案后我就停止了,但我会四处看看是否可以绕过该错误。
【解决方案3】:

意识到这是一个旧线程- 但是,我发现它很有用,并建议将 SET AUTOCOMMIT=0 添加到 Brad 的过程中。这将大大提高性能(在我的系统上;从 2 小时到 4 秒)。更多信息可以在这里找到:

http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-transaction-management.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-10
    • 2011-08-31
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多