SQL求和函数(意外的SUM_SYM,期待END_OF_INPUT))

时间:2013-08-21 13:13:42

标签: mysql sql syntax sum case

我正在尝试编写一个看起来像这样的求和函数:

sum(case when (tblhistorique.REMARQUE LIKE "Added to operation cost%" OR tblhistorique.REMARQUE LIKE "Added to operational cost%")
        then CAST(int, substring_index( LTRIM(substring_index(tblhistorique.REMARQUE, 'Qty:', -1)), '.', 1))
        when (tblhistorique.REMARQUE LIKE "Removed from operation cost%" OR tblhistorique.REMARQUE LIKE "Removed from operational cost%") 
        then CAST(int, substring_index( LTRIM(substring_index(tblhistorique.REMARQUE, 'Qty:', -1)), ' ', 1))*(-1) else 0 end)

它本质上做的是进入表格检查REMARQUE列中的哪种语句,如果添加了我们想要添加QTY,如果它被删除,那么我们想要减去QTY。

要从字符串中获取QTY,需要完成一些字符串操作,这就是你在substring_index中看到的所有内容。这似乎工作正常。

我有2个问题,我可以对SQL中的数字串进行求和,因为我可以用它们算术,我发现它很奇怪吗?我使用这个功能的方式有什么问题?

1 个答案:

答案 0 :(得分:0)

你可以在MySQL中“使用[strings]算术”,因为MySQL会自动将字符串转换为算术上下文中的数字。例如,它将字符串'123'转换为数字123。它还会将'123abc'转换为123。它使用前导数字,因此'abc123'会转换为0

这也适用于求和,因为这将是算术上下文。

表达式的问题可能如下:

CAST(int,  . . .)

正确的语法是:

CAST(. . . as unsigned)

你可以用:

做同样的事情
. . . + 0