W MariaDB, EXPORT_SET()
jest wbudowaną funkcją ciągu, która zwraca ciąg, który odzwierciedla bity w określonej wartości. Za każdy bit ustawiony w określonej wartości otrzymujesz ciąg „włączony”, a za każdy bit nieustawiony w wartości otrzymujesz ciąg „wyłączony”.
Akceptuje co najmniej trzy argumenty plus dwa argumenty opcjonalne.
Składnia
Składnia wygląda tak:
EXPORT_SET(bits, on, off[, separator[, number_of_bits]])
Poniższa tabela zawiera wyjaśnienie tych argumentów.
bits | Wartość, dla której chcesz zwrócić wyniki. Podana jako liczba całkowita, ale jest konwertowana na bity. Za każdy bit ustawiony w tej wartości otrzymujesz on string, a za każdy bit, który nie jest ustawiony w wartości, otrzymujesz off ciąg. Bity są sprawdzane od prawej do lewej (od bitów niskiego rzędu do bitów wysokiego rzędu). |
on | Ciąg, który jest zwracany dla każdego na bity. |
off | Ciąg, który jest zwracany dla każdego off bity. |
separator | Opcjonalny argument, którego można użyć do określenia używanego separatora. Wartość domyślna to znak przecinka. Dlatego, jeśli nie określisz tego argumentu, przecinek zostanie użyty jako separator. |
number_of_bits | Liczba bitów do zbadania. Domyślna wartość to 64. Jeśli podasz większą wartość, zostanie ona po cichu przycięta do 64, jeśli jest większa niż 64. |
Przykład
Oto podstawowy przykład:
SELECT EXPORT_SET(13,'On','Off',',',4);
Wynik:
+---------------------------------+ | EXPORT_SET(13,'On','Off',',',4) | +---------------------------------+ | On,Off,On,On | +---------------------------------+
Widzimy, że pierwszy, trzeci i czwarty bit są ustawione, ale drugi nie.
Możemy użyć BIN()
funkcja zwracająca podobny wynik, ale w odwrotnej kolejności:
SELECT BIN(13);
Wynik:
+---------+ | BIN(13) | +---------+ | 1101 | +---------+
BIN()
funkcja zwraca ciąg reprezentujący wartość binarną danego longlonga. W tym przykładzie zwrócił trzy 1
s.
W naszym EXPORT_SET()
na przykład określiliśmy, że on
i off
powinien być używany do reprezentowania 1
i 0
odpowiednio. Możemy to jednak zmienić (poniżej).
Również za pomocą EXPORT_SET()
, ciągi są dodawane do wyniku od lewej do prawej. Dlatego wynik z EXPORT_SET()
wygląda jak lustrzane odbicie wyniku z BIN()
.
Zmień wartości włączania/wyłączania
Tutaj znowu, ale tym razem używamy innego ciągu dla on
i off
stany.
SELECT EXPORT_SET(7,'1','0',',',4);
Wynik:
+-----------------------------+ | EXPORT_SET(7,'1','0',',',4) | +-----------------------------+ | 1,1,1,0 | +-----------------------------+
Tym razem używamy 1
i 0
, podobny do tego, co BIN()
funkcja powraca, ale z dodanym separatorem (i odwróconym).
Zmień separator
Czwarty (opcjonalny) argument określa, jakiego separatora użyć. Tutaj jest z innym separatorem:
SELECT EXPORT_SET(7,'True','False','-',4);
Wynik:
+------------------------------------+ | EXPORT_SET(7,'True','False','-',4) | +------------------------------------+ | True-True-True-False | +------------------------------------+
Zmień liczbę bitów do zbadania
Piąty (opcjonalny) argument określa liczbę bitów do zbadania. W poprzednich przykładach użyliśmy 4 jako liczby bitów do zbadania. Możemy to zwiększyć, jeśli chcemy:
SELECT EXPORT_SET(7,'1','0',',',10);
Wynik:
+------------------------------+ | EXPORT_SET(7,'1','0',',',10) | +------------------------------+ | 1,1,1,0,0,0,0,0,0,0 | +------------------------------+
W takim przypadku wszystkie dodatkowe bity nie są ustawione. Zwiększmy wartość pierwszego argumentu, aby zobaczyć, jak wpływa to na wynik:
SELECT EXPORT_SET(172,'1','0',',',10);
Wynik:
+--------------------------------+ | EXPORT_SET(172,'1','0',',',10) | +--------------------------------+ | 0,0,1,1,0,1,0,1,0,0 | +--------------------------------+
Wartości domyślne
Jak wspomniano, argumenty czwarty i piąty są opcjonalne. Gdy je pominiesz, zostaną użyte wartości domyślne.
Domyślna liczba bitów
Jeśli usuniemy ostatni argument, sprawdzane są 64 bity:
SELECT EXPORT_SET(172,'1','0','');
Wynik:
+------------------------------------------------------------------+ | EXPORT_SET(172,'1','0','') | +------------------------------------------------------------------+ | 0011010100000000000000000000000000000000000000000000000000000000 | +------------------------------------------------------------------+
W tym przypadku również usunąłem separator, aby dane wyjściowe były bardziej zwięzłe.
Domyślny separator
Możemy również usunąć argument separatora. Kiedy to zrobimy, EXPORT_SET()
używa przecinka jako domyślnego separatora.
SELECT EXPORT_SET(123456789,'1','0');
Wynik:
+-----------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------+ | EXPORT_SET(123456789,'1','0') | +---------------------------------------------------------------------------------------------------------------------------------+ | 1,0,1,0,1,0,0,0,1,0,1,1,0,0,1,1,1,1,0,1,1,0,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 | +---------------------------------------------------------------------------------------------------------------------------------+
Argumenty zerowe
Jeśli którykolwiek z argumentów jest null
, wynik to null
:
SELECT
EXPORT_SET(null,'1','0') AS "1",
EXPORT_SET(7,null,'0') AS "2",
EXPORT_SET(7,'1',null) AS "3",
EXPORT_SET(7,'1','0',null,4) AS "4",
EXPORT_SET(7,'1','0',',',null) AS "5";
Wynik:
+------+------+------+------+------+ | 1 | 2 | 3 | 4 | 5 | +------+------+------+------+------+ | NULL | NULL | NULL | NULL | NULL | +------+------+------+------+------+
Brakujące argumenty
Wywołanie EXPORT_SET()
bez przekazania jakichkolwiek argumentów (lub z niewłaściwą liczbą argumentów) powoduje błąd:
SELECT EXPORT_SET();
Wynik:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'EXPORT_SET'