首页 文章

MariaDB中的DATEADD

提问于
浏览
0

我在 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_ADDMariaDB ADDDATE的参考资料,但是's still doesn'工作了

我的版本MariaDB 10.1.32-MariaDB

编辑:

[SOLVED]

SQL StatmentCONVERT 更改为 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 回答

  • 0

    你不能像这样使用 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)
    

    您可以使用CASTDATE_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'
    

    Note: 也检查 CASE WHEN 上的条件 . 你在同一天检查 .

  • 1

    在没有数据库的情况下,您应该将日期/时间值转换为字符串进行比较 . 我也不鼓励使用 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 进行的 .

相关问题