计算以六进制存储的数字 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;
如果需要,您也可以在新字段上放置索引。
请告诉我它是否适合你
我有一个 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;
如果需要,您也可以在新字段上放置索引。
请告诉我它是否适合你