Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有DATEDIFF和DATETIME()或NOW()的MySQL(或Mariadb)表达式_Mysql_Mariadb - Fatal编程技术网

带有DATEDIFF和DATETIME()或NOW()的MySQL(或Mariadb)表达式

带有DATEDIFF和DATETIME()或NOW()的MySQL(或Mariadb)表达式,mysql,mariadb,Mysql,Mariadb,这里怎么了 CREATE TABLE `actionAngebot` ( `createdAt` DATETIME NOT NULL, `expiryDat` SMALLINT DEFAULT UNSIGNED AS (DATEDIFF(`createdAt`, DATETIME())) STORED ) ENGINE=MyISAM; SQL错误(1064):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 在第3行使用近“()))存储的)ENGINE=My

这里怎么了

CREATE TABLE `actionAngebot` (
    `createdAt` DATETIME NOT NULL,
    `expiryDat` SMALLINT DEFAULT UNSIGNED AS (DATEDIFF(`createdAt`, DATETIME())) STORED
)
ENGINE=MyISAM;
SQL错误(1064):您的SQL语法有错误;检查 与右边的MySQL服务器版本相对应的手册 在第3行使用近“()))存储的)ENGINE=MyISAM”的语法*

请不要向我提议:

CREATE TABLE `promos` (
    `createdAt` DATETIME NOT NULL,
    `createdTil` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    `expiryDateOfReward` SMALLINT(10) AS ((to_days(`createdAt`) - to_days(`createdTil`))) VIRTUAL
)
ENGINE=MyISAM;

我想让它有两列。

当前查询的问题是
DATETIME
是一种数据类型,而不是函数,因此不能将其作为一种类型调用
DATETIME
在该位置也无效,您需要使用
NOW()
CURDATE()
,具体取决于您是希望日期和时间不同,还是只希望日期不同

但是

您不能对包含基于系统日期和时间的函数的生成列使用表达式,因此无法执行所需操作(请参阅)。你可以考虑创建一个视图:
CREATE VIEW aabot AS
SELECT *, DATEDIFF(`createdAt`, NOW()) AS expiryDat
FROM actionAngebot

您的观点会给出查询时的时差吗?或者在更新表的时刻?@HenryStack它将为您提供查询时刻的时差。如果您想在表格更新时使用它,那么除了您在问题中提到的第三列之外,您真的别无选择。t0x