计算以六进制存储的数字 Varchar 列

Count a Numeric Varchar Column Stored in Base Six

我有一个 table 将数值存储在 VARCHAR 列中,该列存储以六进制数学计算的值。含义:

3.5 = 3 + 5 / 6

9.4 = 3.4 + 5.6

我需要得到这些行中值的总和。我知道我需要根据 id 将它们分开,然后将特定 id 的 base-sixe 数字加在一起,但是我不知道从哪里开始。有简单的方法吗?

您可以将这些数字转换为普通数字:

SUBSTRING_INDEX(column, '.', 1) + IF(LOCATE(column, '.'), SUBSTRING_INDEX(column, '.', -1)/6, 0)

然后您可以在 SUM() 中使用此表达式来添加 table 中的所有列,或者您可以将它与 + 一起使用以将不同的列相互添加。例如

SELECT SUM(SUBSTRING_INDEX(column, '.', 1) + IF(LOCATE(column, '.'), SUBSTRING_INDEX(column, '.', -1)/6, 0)) AS total
FROM yourTable

如果您还需要将总和转换回以 6 为底的分数表示形式,您可以使用:

CONCAT(FLOOR(total), '.', ROUND(MOD(total, 1) * 6)

所以完整的查询可能如下所示:

SELECT CONCAT(FLOOR(total), '.', ROUND(MOD(total, 1) * 6) AS total
FROM (SELECT SUM(SUBSTRING_INDEX(column, '.', 1) + 
                 IF(LOCATE(column, '.'), SUBSTRING_INDEX(column, '.', -1)/6, 0)) AS total
      FROM yourTable) as subquery

您可以向 Table 添加一个新的虚拟列,其中 MySQL 每次更改时都会存储标准化值。所以你可以总结这个专栏。

仅更改 Table 名称和列的名称 'col'

ALTER TABLE mytable
  ADD COLUMN norm float AS (FLOOR(col) + MOD(col, 1) / 0.6 ) PERSISTENT;

如果需要,您也可以在新字段上放置索引。

请告诉我它是否适合你