如何将列标题标记为格式化日期?

时间:2016-10-11 10:56:21

标签: mysql pivot date-format

我拥有的:

我有以下查询让我非常需要:

SET @sql = NULL;

SELECT
   GROUP_CONCAT(DISTINCT
     CONCAT(
       'MAX(IF(Date = ''',
        Date,
        ''', Description, NULL)) AS ',
       CONCAT("'",Date,"'")
     )
   ) INTO @sql
FROM updates;

SET @sql = CONCAT('SELECT Action, ', @sql, ' FROM updates GROUP BY Action');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

并提供以下输出:

enter image description here

我需要什么:

我希望Column标题包含以下格式示例:

  

日/月/年

     

2016年4月10日

     

%d /%米/&安培; Y

我尝试过:

我已经对我的代码尝试了许多不同的更改(这里列出了太多的小改动),但每次我似乎都会收到错误,我猜的是关于查询的格式/语法。

下面是一个例子,我试图展示我的想法:

SET @sql = NULL;

SELECT
   GROUP_CONCAT(DISTINCT
     CONCAT(
       'MAX(IF(Date = ''',
       Date,
       ''', Description, NULL)) AS ',
       CONCAT("'",Date_Format(Date, "'"%d/%m/%Y"'"),"'")
     )
   ) INTO @sql
FROM updates;


SET @sql = CONCAT('SELECT Action, ', @sql, ' FROM updates GROUP BY Action');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

正如你所看到的,我试图设置" AS"值(列名)使用DATE_FORMAT代码片段。但是,当我运行它时,在" FROM更新后出现以下错误;"在" INTO @ sql":

之前
  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   语法使用在'%m /%Y"'"),"'")

这反过来在PREPARE stmt FROM @sql:

之后给出了以下错误消息
  

错误1064(42000):您的SQL语法有错误;检查   手册,对应右边的MySQL服务器版本   语法在' NULL附近使用'在第1行

如果有人知道如何帮助我或指出我正确的方向,我将非常感激!

1 个答案:

答案 0 :(得分:1)

select concat(date_format(now(), '%d/%m/%Y'))给了我11/10/2016

这工作得非常好。我想你应该考虑删除双引号。这应该可以解决问题。