Estoy tratando de construir una consulta en MySQL que concatena un montón de campos binarios y luego me da el resultado en forma DECIMAL.

e.g:

SELECT CONCAT (setting1, setting2, setting3) AS settings;

de mayo me dio:

101
111
110

Quiero pasar este valor a una función (convertir? cast?) que me dará el correspondiente valor DECIMAL:

5
7
6

Ya he probado un par de combinaciones de cast() y convert(), pero no ha resuelto todavía.

InformationsquelleAutor Tenakha | 2012-06-14

3 Comentarios

  1. 1

    No lo intenta, pero lo intente.

    Primero, su entrada digamos que es de 6.

    INSERT INTO Table (FieldTest) VALUES (UNHEX(CONV(6, 10, 16)))
    SELECT CONV(HEX(UNHEX(6)), 16, 10)

    con un campo

    SELECT CONV(HEX(FieldTest), 16, 10))

    UNHEX la transformación de los datos de hexadecimal a binario.

    CONV va a transformar los datos de una base a otra.

    Aquí para transformar la base de 10 a 16 (dec hex) y, a continuación, hacemos hex para reciclaje.

    Cuando la seleccione, hacemos BIN, HEX, HEX a BIN

    En realidad, sólo podía hacer CONV(6, 10, 2) y a la inversa, cuando la lectura.

    • probé.. no acaba de funcionar. Creo que el problema podría ser que CONCAT (setting1,setting2,setting3) – esto nos da una serie de 1 y 0 — que deben ser emitidos() a binario, tal vez?
    • Su campo es BINARIO ? Porque si ejecuta este : SELECT CONV(HEX(UNHEX(6)), 16, 10), el resultado será 6.
    • No, el campo es una cadena, porque cuando CONCAT todos los 1’s y 0’s – se queda con una Cadena.
    • Por eso. Uso campo BINARIO para almacenar datos BINARIOS. Evento si es sólo 110 o 111… Utilizar el BINARIO(2) para almacenar una cadena como la que 1111 O 0100 O 0101
  2. 0

    Usted podría tratar de hacer el poder de las matemáticas en binario

    SELECT setting1 * 4 + setting2 * 2 + setting3 * 1 AS settings;

    pero, ¿qué significa lo que está haciendo

    SELECT setting1 * POW(2, 2) + setting2 * POW(2, 1) + setting3 * POW(2, 0) AS settings;

    2^0 representa el derecho de la mayoría de bits

    2^1 es el segundo, y así sucesivamente…

    En el futuro si las columnas binarias de MySQL, podría ser más fácil de combinar en una sola [deja un comentario en la columna a recordar el orden]

    Habría que agregar los datos en la base de datos como

    INSERT INTO settings (setting) VALUES (setting1 * 4 + setting2 * 2 + setting1 * 1);

    y tire de uno solo con
    SELECT setting & 2 FROM settings;
    devuelve el valor de setting2.

    Mirar en Bit A Bit Funciones.

Dejar respuesta

Please enter your comment!
Please enter your name here