Tengo una tabla, por lo que esta tabla tiene una columna cuyo nombre es bit_column. Y el tipo de esta columna es varchar (64). esta columna solo contiene ceros y unos. (Ej: '1010100010011110111011101 .....'). Quiero XOR esta columna con la cadena dada (esta cadena también contiene ceros y unos). Por ejemplo: BIT_COUNT (b'01001 '^ b'01101') este retorno 1. Entonces, ¿cómo puedo hacerlo en la columna de la tabla?

1
Mirnamiq Abdullayev 23 oct. 2019 a las 13:53

1 respuesta

La mejor respuesta

Convierta el valor de la columna y la cadena dada en un número entero decimal con CONV() y CAST() y aplique el operador XOR bit a bit ^.
Luego convierta el resultado a binario y rellene a la izquierda con ceros:

SET @s = '0011001100110011001100110011001100110011001100110011001100110011';
SELECT
  LPAD(CONV(
    CAST(CONV(bit_column, 2, 10) AS UNSIGNED INTEGER) 
    ^ 
    CAST(CONV(@s, 2, 10) AS UNSIGNED INTEGER),
    10, 2
  ), 64, '0')
FROM tablename 

Consulte la demostración.

2
forpas 23 oct. 2019 a las 11:45