mysql - 在mysql中将varchar转换为二进制?

标签 mysql sql

我的表格中有以下数据:

create table tutor(
   id int,
   accessto varchar(8)
);

数据如下所示:

+-------+----------+
| id    | accessto |
+-------+----------+
|    69 | b'1011'  |
|   162 | b'1011'  |
|   232 | b'1011'  |
|   257 | b'0010'  |
|   258 | b'1011'  |
|   258 | b'1011'  |
|   258 | b'1011'  |
|   258 | b'1011'  |
|   258 | b'1011'  |
|   258 | b'1011'  |
|   258 | b'1110'  |
|   258 | b'1001'  |
|   258 | b'0011'  |
|   258 | b'1001'  |
+-------+----------+

我想将其转换为二进制。怎么可能?

我尝试了这些查询,但得到了相同的结果:

select id, cast(accessto as BINARY) from tutor;
select id, convert(accessto,binary) from tutor;

如何做到这一点?

我的预期结果应该是这样的:

 +-------+----------+
    | id    | accessto |
    +-------+----------+
    |    69 | 11  |
    |   162 | 11  |
    |   232 | 11  |
    |   257 | 2  |
    |   258 | 11  |
    |   258 | 11  |
    |   258 | 11  |
    |   258 | 11  |
    |   258 | 11  |
    |   258 | 11  |
    |   258 | 14  |
    |   258 | 9  |
    |   258 | 3  |
    |   258 | 9  |
    +-------+----------+

最佳答案

由于接受的答案不必要地复杂,这里有一个简洁的答案:

TLDR;

一步即可实现结果:

SELECT CONV(TRIM("'" FROM SUBSTRING("0b'1011'", 3)), 2, 16);

说明

起点是包含0b1011的字符串:

SET @string = "0b'1011'"; -- (string) 0b'1011'

我们可以应用字符串运算来使其更接近数字:

SET @plainnumber = TRIM("'" FROM SUBSTRING(@string, 3)); -- (string) 1011

然后我们可以将字符串转换为实数,不带符号,因为没有符号:(这里不能使用 binary 作为类型,因为它是 string type 。此步骤是可选的因为 MySQL 会隐式转换。)

SET @number = CAST(@plainnumber AS UNSIGNED); -- (unsigned) 1011

您现在可以用它做任何您想做的事情。 OP想要获得可以通过CONV获取的十进制表示形式:

SELECT CONV(@number, 2, 10);

十六进制解释

如果您的起点是包含十六进制表示形式的字符串:

SET @string = "41"; -- 0x41

您可以使用 UNHEX 函数来获取二进制字符串:

SELECT UNHEX(@string);

或者您可以使用 CONV 来获取数字表示:

SELECT CONV(@string, 16, 10); -- decimal (65)
SELECT CONV(@string, 16, 2); -- binary (0100 0001)

关于mysql - 在mysql中将varchar转换为二进制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52144865/

相关文章:

php - 限制发送到服务器的客户端请求的数量

mysql - 一种将两个mysql查询合并为一个查询的方法

SQL Server 表转 json

mysql - 有两个用户 ID 表和它们之间的链接

sql - 如何在 Sql 中设计 oauth 2.0 访问 token 字段?

mysql - 谁能帮我找找2005年以前出版的书?

MySQL:计算多个状态的持续时间

mysql - 从一些平均值中选择最大值后的 SQL 更新

mysql - 无法按原样插入值 - 需要任何数据库的答案 - Oracle、Sql Server、MySql 等

sql - MySql 使用 Sum 连接