преобразование VARCHAR в двоичный файл в MySQL? - PullRequest
0 голосов
/ 03 сентября 2018

У меня в таблице есть следующие данные:

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  |
    +-------+----------+

Ответы [ 4 ]

0 голосов
/ 03 сентября 2018

Возможно, вам придется сделать это «сложным» способом и создать битовое поле либо в tutor, либо в другой таблице, внутреннее преобразование работает лучше, чем приведение и преобразование

drop table if exists t;
create table t(
   id int,
   accessto varchar(8),
   abit bit(8)
);


insert into t(id,accessto) values
(    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') ;

update t
set abit = accessto;

    MariaDB [sandbox]> select bin(abit),cast(abit  as unsigned) from t;
+-----------+-------------------------+
| bin(abit) | cast(abit  as unsigned) |
+-----------+-------------------------+
| 1011      |                      11 |
| 1011      |                      11 |
| 1011      |                      11 |
| 10        |                       2 |
| 1011      |                      11 |
| 1011      |                      11 |
| 1011      |                      11 |
| 1011      |                      11 |
| 1011      |                      11 |
| 1011      |                      11 |
| 1110      |                      14 |
| 1001      |                       9 |
| 11        |                       3 |
| 1001      |                       9 |
+-----------+-------------------------+
14 rows in set (0.00 sec)
0 голосов
/ 03 сентября 2018

Удалить b из вашей колонки

и выполните приведенное ниже преобразование, оно будет работать

select CONV('1011', 2, 10)

Вы можете удалить ниже, используя кнопку conv

select id,CONV(TRIM(LEADING 'b' FROM accessto), 2, 10) from table1
0 голосов
/ 03 сентября 2018

- Заменить «бинарный» на «UNSIGNED»

select id, cast(accessto as UNSIGNED) from tutor;
0 голосов
/ 03 сентября 2018

Вы должны использовать функцию CONV mysql

select id, CONV(BINARY(accessto), 2, 10) from tutor;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...