【问题标题】:How can I create a temporary table in mariadb or mysql?如何在 mariadb 或 mysql 中创建临时表?
【发布时间】:2016-10-28 22:24:14
【问题描述】:

现在,我正在将 mssql 迁移到 mariadb(mysql)。 mssql有with子句(with A as ()),但是mysql没有with子句。所以我使用“创建临时表”,但出现了一些错误。

例子,

CREATE TEMPORARY TABLE TMP(
    SELECT CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %T.%f') AS CHAR(19)) AS REGDT
);

这是错误代码

MySQL 数据库错误:截断不正确的 CHAR(19) 值:'2016-06-27 10:34:34.000000'

怎么了?

这是我的查询。

CREATE TEMPORARY TABLE TMP(
  SELECT DEPTCODE, DEPTNAME, USEYN, HIGHDEPTCODE, 
         CAST(DATE_FORMAT(REGDT, '%Y-%m-%d %T.%f') AS CHAR(19)) AS REGDT,
         0 AS LEV, CAST(DEPTCODE AS CHAR(255)) AS SORT, DEPTORDER 
    FROM TBDEPARTMENT
   WHERE DEPTCODE = '1000');

【问题讨论】:

    标签: mysql sql-server mariadb database-migration


    【解决方案1】:

    CHAR(19) 太小,无法以毫秒为单位存储整个日期。

    改用 CHAR(26):

    CREATE TEMPORARY TABLE TMP(
        SELECT CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %T.%f') AS CHAR(26)) AS REGDT
    );
    

    或删除毫秒:

    CREATE TEMPORARY TABLE TMP(
        SELECT CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %T') AS CHAR(19)) AS REGDT
    );
    

    您也可以使用 DATETIME 类型而不是字符串。

    【讨论】:

    • 感谢您的回答!!
    • 或者不要将日期时间存储为字符串 (!?)。这是DATETIME(6),不是吗?
    【解决方案2】:

    没有骨折,所以不需要CAST

    mysql> SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %T.%f');
    +--------------------------------------+
    | DATE_FORMAT(NOW(), '%Y-%m-%d %T.%f') |
    +--------------------------------------+
    | 2016-07-03 16:23:28.000000           |
    +--------------------------------------+
    

    如果您只在表中放置一个值,请考虑使用 @ 变量:

    mysql> SELECT @regdt := DATE_FORMAT(NOW(), '%Y-%m-%d %T.%f');
    +------------------------------------------------+
    | @regdt := DATE_FORMAT(NOW(), '%Y-%m-%d %T.%f') |
    +------------------------------------------------+
    | 2016-07-03 16:26:07.000000                     |
    +------------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> SELECT @regdt;
    +----------------------------+
    | @regdt                     |
    +----------------------------+
    | 2016-07-03 16:26:07.000000 |
    +----------------------------+
    

    【讨论】:

      猜你喜欢
      • 2020-02-25
      • 2012-03-23
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      相关资源
      最近更新 更多