我在 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的推荐信,但它仍然无法正常工作
我的版本MariaDB 10.1.32-MariaDB
编辑:
[已解决]
将 SQL规则从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'
以
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
答案 0 :(得分:1)
你不能像这样使用CONVERT
:
CONVERT(varchar, Production.MadeDate, 112)
这是TSQL/MSSQL syntax,在MariaDB或MySQL上不能像这样使用。
因此,您可以尝试使用以下某项替换当前CONVERT
:
CONVERT(Production.MadeDate, DATE) -- using CONVERT (ODBC syntax)
CAST(Production.MadeDate AS DATE) -- using CAST (SQL92 syntax)
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'
注意:也检查CASE WHEN
上的条件。你在同一天检查。
答案 1 :(得分:0)
在没有数据库的情况下,您应该将日期/时间值转换为字符串进行比较。我也不鼓励使用BETWEEN
。所以,我希望在MariaDB中有类似的东西:
SUM(CASE WHEN Production.MadeDate >= '2018-06-05' - INTERVAL 2 DAY AND
Production.MadeDate < '2018-06-05' - INTERVAL 1 DAY
THEN Production.Qty
ELSE 0
END) AS N_2
在SQL Server中,我将其写为:
SUM(CASE WHEN Production.MadeDate >= DATEADD(day, -2, '2018-06-05') AND
Production.MadeDate < DATEADD(day, -1, '2018-06-05')
THEN Production.Qty
ELSE 0
END) AS N_2
请注意更改:
N-2
已更改为N_2
,因此不需要转义列别名。BETWEEN
进行的。