【发布时间】:2013-10-24 15:11:47
【问题描述】:
我的表有一个列,我知道它是一个 128 位无符号数,以 varchar 形式存储在 base-10 中,例如
"25495123833603613494099723681886"
我知道这个数字中的位域,我想使用GROUP BY 中的前 64 位。
在我的示例中,前 64 位为 1382093432409
我还没有找到方法,但我已经消除了一些线索:
- 无法转换为
NUMERIC/DECIMAL,因为它们也是 64 位的 - 无法使用
LEFT(),因为1<<64不是以 10 为基数对齐的 -
CONV(N,10,16)将允许LEFT()但CONV()也只能在 64 位精度下工作:(
我怎样才能得到这个数字的前 64 位 BIGINT,所以我可以在 GROUP BY 中使用它?
【问题讨论】:
-
不存储它们以 10 为基数,而是以 16 为基数——这意味着 varchar 中的十六进制值如何?那么获得前 64 位将非常容易——将是前四个字符。 (假设您使用 8 个字符的固定长度存储它们,必要时补零。)
-
@CBroe 不幸的是,数据已经在表格中,我只想报告它。我无法更改架构,也无法更改生成数据的代码。它是一个遗留系统。
-
用新的十六进制列创建视图? idk 关于性能然后..
-
@Sebas 但这又导致了如何做到这一点的问题......
-
对,
HEX()也仅限于其输入...您可以创建自己的 HEX 存储过程,将字符串拆分为 n 个部分以独立处理这些部分。
标签: mysql