我在 SQL Server 中使用了 DATEADD
语句,我需要迁移到 MariaDB
SUM (
CASE
WHEN CONVERT(varchar, Production.MadeDate , 112) BETWEEN DATE_ADD(DAY, -2, '2018-06-05') AND DATE_ADD(DAY, -2, '2018-06-05') THEN
Production.Qty
ELSE
0
END
) AS 'N-2'
我得到这样的错误
[42000] [1064]您的SQL语法有错误;检查与MariaDB服务器版本对应的手册,以便在'varchar,Production.MadeDate,112)BETWEEN DATE_ADD(DAY,-2,'2018-06-05')和'第3行'附近使用正确的语法
我有来自MariaDB DATE_ADD和MariaDB ADDDATE的参考资料,但是's still doesn'工作了
我的版本MariaDB 10.1.32-MariaDB
编辑:
[SOLVED]
将 SQL Statment 从 CONVERT
更改为 CAST
SUM (
CASE
WHEN CONVERT(varchar, Production.MadeDate , 112) BETWEEN DATE_ADD(DAY, -2, '2018-06-05') AND DATE_ADD(DAY, -2, '2018-06-05') THEN
Production.Qty
ELSE
0
END
) AS 'N-2'
TO
SUM (
CASE WHEN CAST(Production.MadeDate AS DATE) BETWEEN DATE_ADD('2018-06-05', INTERVAL -2 DAY) AND DATE_ADD('2018-06-05', INTERVAL -2 DAY) THEN
Production.Qty
ELSE
0
END
) AS 'N-2'
它对我有用
10.1.32-MariaDB
2 回答
你不能像这样使用
CONVERT
:这是TSQL/MSSQL syntax,在MariaDB或MySQL上不能像这样使用 .
因此,您可以尝试使用以下之一替换当前的
CONVERT
:您可以使用CAST和DATE_ADD尝试以下查询:
Note: 也检查
CASE WHEN
上的条件 . 你在同一天检查 .在没有数据库的情况下,您应该将日期/时间值转换为字符串进行比较 . 我也不鼓励使用
BETWEEN
. 所以,我希望MariaDB中有这样的东西:在SQL Server中,我将其写为:
请注意更改:
所有比较均使用原生日期/时间类型完成 .
N-2
更改为N_2
,因此不需要转义列别名 .日期/时间比较是使用直接比较而不是
BETWEEN
进行的 .