sql >> Databasteknik >  >> RDS >> Mysql

Hur UNHEX()-funktionen fungerar i MySQL

I MySQL, UNHEX() funktionen låter dig "avhexa" en sträng i MySQL. Med andra ord låter den dig konvertera ett hexadecimalt värde till en läsbar sträng.

Specifikt tolkar funktionen varje teckenpar i argumentet som ett hexadecimalt tal och konverterar det till den byte som representeras av talet. Returvärdet är en binär sträng.

Syntax

Syntaxen ser ut så här:

UNHEX(str)

Där str är strängen som ska unhex.

Exempel 1 – Grundläggande användning

Här är ett grundläggande exempel:

SELECT UNHEX('436F636F6E75742070616C6D') AS Unhexed;

Resultat:

+--------------+
| Unhexed      |
+--------------+
| Coconut palm |
+--------------+

Så jag angav ett hex-värde som ett argument, och funktionen tog bort det värdet och returnerade resultatet (som är en binär sträng).

Exempel 2 – Konvertera en sträng till hexadecimal

Vi kan också göra det omvända genom att använda HEX() funktion för att konvertera strängen till ett hexadecimalt värde:

SELECT HEX('Coconut palm') AS Hexed;

Resultat:

+--------------------------+
| Hexed                    |
+--------------------------+
| 436F636F6E75742070616C6D |
+--------------------------+

Därför kunde vi kapsla en funktion i den andra, och vi skulle helt enkelt få vårt argument tillbaka:

SELECT 
  UNHEX(HEX('Coconut palm')) AS 'Result 1',
  HEX(UNHEX('436F636F6E75742070616C6D')) AS 'Result 2';

Resultat:

+--------------+--------------------------+
| Result 1     | Result 2                 |
+--------------+--------------------------+
| Coconut palm | 436F636F6E75742070616C6D |
+--------------+--------------------------+

Exempel 3 – Ogiltiga hexadecimala tecken

Argumentet måste innehålla giltiga hexadecimala tecken. Om något av tecknen inte är giltiga hexadecken blir resultatet NULL :

SELECT 
  UNHEX(' '),
  UNHEX('_xyz');

Resultat:

+------------+---------------+
| UNHEX(' ') | UNHEX('_xyz') |
+------------+---------------+
| NULL       | NULL          |
+------------+---------------+

Exempel 4 – Numeriska argument

UNHEX() Funktionen fungerar inte på hexadecimala ekvivalenter av numeriska värden.

Här är ett exempel på vad jag menar:

SELECT 
  HEX(1234),
  UNHEX('4D2');

Resultat:

+-----------+--------------+
| HEX(1234) | UNHEX('4D2') |
+-----------+--------------+
| 4D2       | ?            |
+-----------+--------------+

Ett annat sätt att visa detta är:

SELECT UNHEX(HEX(1234));

Resultat:

+------------------+
| UNHEX(HEX(1234)) |
+------------------+
| ?                |
+------------------+

Så vad detta visar oss är att den hexadecimala motsvarigheten till 1234 är 4D2 och UNHEX() funktion kan inte hantera det värdet.

I sådana fall kan du använda CONV() funktion istället:

SELECT 
  HEX(1234),
  CONV('4D2', 16, 10),
  CONV(HEX(1234), 16, 10);

Resultat:

+-----------+---------------------+-------------------------+
| HEX(1234) | CONV('4D2', 16, 10) | CONV(HEX(1234), 16, 10) |
+-----------+---------------------+-------------------------+
| 4D2       | 1234                | 1234                    |
+-----------+---------------------+-------------------------+

I det här exemplet använder vi CONV() för att konvertera värdet från bas-16 (hexadecimal) till bas-10 (decimal).


  1. SQL-server ignorera skiftläge i ett where-uttryck

  2. Fråga som returnerar en hierarkisk lista över triggerhändelsetyper i SQL Server

  3. Postgres-funktionen returnerar tabell som inte returnerar data i kolumner

  4. Aggregerad funktion i MySQL - lista (som LISTAGG i Oracle)