gpt4 book ai didi

mysql - 如何从 MySQL 中的表达式或字符串将位插入 BIT 字段?

转载 作者:行者123 更新时间:2023-11-30 21:30:20 26 4
gpt4 key购买 nike

我有一个包含 52 个 boolean 字段的表。它们是每条记录的特定标志。

为了使索引更快/更容易,以及能够使这些标志的组合唯一,我插入了一个名为flags的新列,如下所示:

ALTER TABLE myTable ADD COLUMN flags BIT(52);

现在,我可以使用以下表示法手动将值插入该列:

INSERT INTO myTable (flags) values (b'0011000101');

但是,我希望能够从我已经填充的 bool 字段上已经存在的数据更新所有记录的字段标志。像这样的东西:

UPDATE myTable SET flags = CONCAT(myBoolean1, myBoolean2, myBoolean3, ... myBoolean52);

这当然行不通,因为 CONCAT 函数生成一个 varchar(52) 的 1 和 0。 p>

我一直在尝试在 CASTCONV 上使用不同的参数,但没有成功。而且我没有看到一种明显的方法来使 b'00101011' 从表达式而不是引用的 1 和 0 中工作。

如何从从其他 bool 字段构建位的表达式中填充 BIT 类型字段?

最佳答案

你可以试试CONV函数(我没用BIT类型试过):

UPDATE
myTable
SET
flags = 0 + CONV(CONCAT(myBoolean1, myBoolean2, myBoolean3, ... myBoolean52), 2, 10)
;

UPDATE
myTable
SET
flags = CAST(CONV(CONCAT(myBoolean1, myBoolean2, myBoolean3, ... myBoolean52), 2, 10) AS UNSIGNED)
;

解释:

CONCAT -- 将您的 1/0 值转换为二进制字符串 ('1', '1', '0' => '110')

CONV -- 将二进制字符串转换为 dec 字符串 ('110' => '6')

CAST0 + - 将 dec 字符串转换为 int ('6' => 6)

不过,我担心的是:

To make indexing faster/easier

人们通常使用位掩码来按精确位进行过滤。不幸的是,MySQL 在这种情况下不会使用索引。

关于mysql - 如何从 MySQL 中的表达式或字符串将位插入 BIT 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56549631/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com