0

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

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,需要进行一点字符串操作,这就是您在 substring_index 中看到的所有内容。这似乎工作正常。

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

4

1 回答 1

0

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

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

您的表达方式可能存在以下问题:

CAST(int,  . . .)

正确的语法是:

CAST(. . . as unsigned)

你可以做同样的事情:

. . . + 0
于 2013-08-21T13:34:46.743 回答