【问题标题】:In MySQL, Is it possible to set dates as column name在 MySQL 中,是否可以将日期设置为列名
【发布时间】:2013-09-25 10:27:26
【问题描述】:

在 MySQL 中,是否可以将日期设置为列名。
我正在考虑创建一个包含最近 3 周数据的表,其中所有三周的列名将是该周的第一个日期。
因此,如果当前日期是 25-09-2013,那么我的表应该有 3 列,列名为:
11-09-2013、28-09-2013 和 25-09-2013。

【问题讨论】:

  • 这将有助于我们更好地想象这种情况,如果你也解释你为什么要这样做。
  • 请解释您要解决的问题,而不是寻求解决方案的帮助。

标签: mysql date


【解决方案1】:

当然,为什么不呢:

mysql> 选择 'foo' 作为 `2013-09-25`; +------------+ | 2013-09-25 | +------------+ |富 | +------------+ 一组中的 1 行(0.00 秒)

-只记得反引号。

但是,实际上,如果您想生成一些动态列,这不是一个好主意 - 您最好使用应用程序。

【讨论】:

    【解决方案2】:

    这可能可能,但我会说这是一个可怕的、非规范化的、不可持续的、脑死亡的设计。我建议重新考虑它,对您的要求一无所知。

    【讨论】:

    • 是的,我的查询已经变大了。我的表有 3 列日期、管理员、msu,我正在比较过去 3 周的 msu。选择它们作为 Select ADMIN1,WEEK1,WEEK2,WEEK3,(((WEEK3-WEEK2)/WEEK2)*100) as percent_change, (WEEK3-WEEK2) as MSU_Difference from .... 我只想打印日期代替 WEEK1 ,第 2 周,第 3 周。
    • 您可以通过一对多关系轻松做到这一点:两个表之间的外键和 JOIN。
    【解决方案3】:

    你这样做的理由是什么?

    如果只是为了让数据看起来更具可读性,那么可以通过运行将数据格式化为您需要的布局的报告来实现。

    只需在每个条目上存储带有日期标签的数据,然后在报告中以 3 周的时间块检索它。

    动态创建表会给您的处理增加不必要的开销,并使其他进程的备份、复制和检索变得复杂。

    【讨论】:

      【解决方案4】:

      您想在显示层中执行此操作。

      选择列作为

      if(date=curdate() - interval 1 day, result, null) as today_minus_1,
      if(date=curdate() - interval 2 day, result, null) as today_minus_2,
      if(date=curdate() - interval 2 day, result, null) as today_minus_3,
      

      之后,当您显示时,重命名它们。我之前做过类似的事情来比较广告系列的效果,但是在创建数据表时将列命名为日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-14
        • 1970-01-01
        • 2010-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-20
        • 1970-01-01
        相关资源
        最近更新 更多