首页 > 解决方案 > MariaDB 中的 DATEADD

问题描述

我在SQL ServerDATEADD中使用语句,我需要迁移到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 服务器版本相对应的手册,以在第 3 行的 'varchar, Production.MadeDate , 112) BETWEEN DATE_ADD(DAY, -2, '2018-06-05') AND ' 附近使用正确的语法

我从MariaDB DATE_ADDMariaDB ADDDATE获得了参考,但它仍然无法正常工作

我的版本 MariaDB10.1.32-MariaDB

编辑 :

[解决了]

将SQL 语句从更改CONVERTCAST

  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

标签: sqlmariadb

解决方案


你不能CONVERT在 MariaDB / MySQL 上使用这样的:

CONVERT(varchar, Production.MadeDate, 112)

参数的顺序在 MariaDB / MySQL 上无效。参数的顺序看起来像TSQL/SQL Server 语法

因此,您可以将当前替换CONVERT为以下内容之一:

CONVERT(Production.MadeDate, DATE)  -- using CONVERT (ODBC syntax)
CAST(Production.MadeDate AS DATE)   -- using CAST (SQL92 syntax)

SUM您可以使用CASTand使用以下内容DATE_ADD

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。您在同一天之间进行检查。


推荐阅读