【问题标题】:Use DATE_ADD to complete tstamp column使用 DATE_ADD 完成 tstamp 列
【发布时间】:2014-12-26 20:34:22
【问题描述】:

希望你们圣诞节过得愉快! 我想知道,当列是 tstamp 时,有没有办法使用或应用 COALESCE? 这样当 tstamp 是这样的时候:

|       tstamp          |
| 2014-12-25 00:01:00   |
| 2014-12-25 00:02:00   |
| 2014-12-25 00:05:00   |
| 2014-12-25 00:07:00   |
| 2014-12-25 00:08:00   |

我想如果我使用 coalesce hen 我可以填写缺失的时间并让 tstamp 列看起来像这样:

|       tstamp          |
| 2014-12-25 00:01:00   |
| 2014-12-25 00:02:00   |
| 2014-12-25 00:03:00   |
| 2014-12-25 00:04:00   |   
| 2014-12-25 00:05:00   |
| 2014-12-25 00:06:00   |   
| 2014-12-25 00:07:00   |
| 2014-12-25 00:08:00   |

有可能吗?使用 COALESCE 来获得我想要的输出是否正确?建议总是受到赞赏。谢谢你


更新:

我想我可以使用 DATE_ADD 之类的东西并这样做

SELECT DATE_ADD('2014-12-25 00:00:00', INTERVAL 1 MINUTE)

但我不确定如何让它工作,因为当我执行该查询时我只得到一行..

SELECT DATE_ADD('2014-12-25 00:01:00', INTERVAL 1 MINUTE)

有什么想法吗?谢谢你

【问题讨论】:

    标签: mysql dateadd


    【解决方案1】:

    不,这不可能,因为这不是COALESCE() 函数的正确使用。 COALESCE() 函数用于从提供的值列表中选择/获取第一个 NON NULL 值作为参数。

    【讨论】:

    • 哦,好吧,我应该改用什么?
    【解决方案2】:

    如果您今天每分钟将名为 tstamp 的列填充到表中(称为 mydb.mytable),您可以执行类似的操作

    首先进行一天中每一分钟生成的查询

    SELECT H*60+HRMIN MINVAL FROM
    (SELECT  0 H UNION SELECT  1 UNION SELECT  2 UNION SELECT  3 UNION
    SELECT   4   UNION SELECT  5 UNION SELECT  6 UNION SELECT  7 UNION 
    SELECT   8   UNION SELECT  9 UNION SELECT 10 UNION SELECT 11 UNION 
    SELECT  12   UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION 
    SELECT  16   UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION 
    SELECT  20   UNION SELECT 21 UNION SELECT 22 UNION SELECT 23) A,
    (SELECT MT*10+MU HRMIN FROM
    (SELECT 0 MT UNION SELECT 1 UNION SELECT 2 UNION
    SELECT 3 UNION SELECT 4 UNION SELECT 5) AA,
    (SELECT 0 MU UNION SELECT 1 UNION SELECT 2
    UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
    UNION SELECT 6 UNION SELECT 7 UNION SELECT 8
    UNION SELECT 9) BB) B ORDER BY MINVAL;
    

    将其更改为今天每分钟创建一次

    SELECT DATE(NOW()) + INTERVAL H*60+HRMIN MINUTE MINVAL FROM
    (SELECT  0 H UNION SELECT  1 UNION SELECT  2 UNION SELECT  3 UNION
    SELECT   4   UNION SELECT  5 UNION SELECT  6 UNION SELECT  7 UNION 
    SELECT   8   UNION SELECT  9 UNION SELECT 10 UNION SELECT 11 UNION 
    SELECT  12   UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION 
    SELECT  16   UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION 
    SELECT  20   UNION SELECT 21 UNION SELECT 22 UNION SELECT 23) A,
    (SELECT MT*10+MU HRMIN FROM
    (SELECT 0 MT UNION SELECT 1 UNION SELECT 2 UNION
    SELECT 3 UNION SELECT 4 UNION SELECT 5) AA,
    (SELECT 0 MU UNION SELECT 1 UNION SELECT 2
    UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
    UNION SELECT 6 UNION SELECT 7 UNION SELECT 8
    UNION SELECT 9) BB) B ORDER BY MINVAL;
    

    现在,将它们插入表格中

    INSERT IGNORE INTO mydb.mytable (tstamp)
    SELECT DATE(NOW()) + INTERVAL H*60+HRMIN MINUTE MINVAL FROM
    (SELECT  0 H UNION SELECT  1 UNION SELECT  2 UNION SELECT  3 UNION
    SELECT   4   UNION SELECT  5 UNION SELECT  6 UNION SELECT  7 UNION 
    SELECT   8   UNION SELECT  9 UNION SELECT 10 UNION SELECT 11 UNION 
    SELECT  12   UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION 
    SELECT  16   UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION 
    SELECT  20   UNION SELECT 21 UNION SELECT 22 UNION SELECT 23) A,
    (SELECT MT*10+MU HRMIN FROM
    (SELECT 0 MT UNION SELECT 1 UNION SELECT 2 UNION
    SELECT 3 UNION SELECT 4 UNION SELECT 5) AA,
    (SELECT 0 MU UNION SELECT 1 UNION SELECT 2
    UNION SELECT 3 UNION SELECT 4 UNION SELECT 5
    UNION SELECT 6 UNION SELECT 7 UNION SELECT 8
    UNION SELECT 9) BB) B ORDER BY MINVAL;
    

    我使用INSERT IGNORE 以防万一已经存在分钟。

    试试看!!!

    【讨论】:

      猜你喜欢
      • 2017-09-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      • 1970-01-01
      相关资源
      最近更新 更多