我正在尝试编写一个看起来像这样的求和函数:
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中的数字串进行求和,因为我可以用它们算术,我发现它很奇怪吗?我使用这个功能的方式有什么问题?
答案 0 :(得分:0)
你可以在MySQL中“使用[strings]算术”,因为MySQL会自动将字符串转换为算术上下文中的数字。例如,它将字符串'123'
转换为数字123
。它还会将'123abc'
转换为123
。它使用前导数字,因此'abc123'
会转换为0
。
这也适用于求和,因为这将是算术上下文。
表达式的问题可能如下:
CAST(int, . . .)
正确的语法是:
CAST(. . . as unsigned)
你可以用:
做同样的事情. . . + 0