MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Bagaimana WEIGHT_STRING() Bekerja di MariaDB

Di MariaDB, WEIGHT_STRING() adalah fungsi bawaan yang mengembalikan string bobot untuk string input. Nilai yang dikembalikan adalah string biner yang mewakili nilai perbandingan dan pengurutan string.

Jika string input adalah nilai nonbiner, nilai kembalian berisi bobot susunan string. Jika itu nilai biner, hasilnya sama dengan string input. Ini karena bobot untuk setiap byte dalam string biner adalah nilai byte.

Fungsi ini adalah fungsi debugging yang ditujukan untuk penggunaan internal. Ini dapat digunakan untuk menguji dan men-debug susunan.

Sintaks

Sintaksnya seperti ini:

WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [LEVEL levels] [flags])
  levels: N [ASC|DESC|REVERSE] [, N [ASC|DESC|REVERSE]] ... 

Di bawah ini adalah deskripsi dari setiap argumen/klausa.

AS Klausa

AS opsional klausa mengizinkan casting string input ke string biner atau non-biner, serta ke panjang tertentu.

  • AS BINARY(N) mengukur panjang dalam byte daripada karakter, dan pad kanan dengan 0x00 byte ke panjang yang diinginkan.
  • AS CHAR(N) mengukur panjang dalam karakter, dan pad kanan dengan spasi sesuai panjang yang diinginkan.

N memiliki nilai minimum 1 , dan jika panjangnya kurang dari string input, string akan terpotong tanpa peringatan.

LEVEL Klausa

Menentukan bahwa nilai kembalian harus berisi bobot untuk tingkat susunan tertentu.

 levels specifier dapat berupa bilangan bulat tunggal, daftar bilangan bulat yang dipisahkan koma, atau rentang bilangan bulat yang dipisahkan oleh tanda hubung (spasi diabaikan). Bilangan bulat dapat berkisar dari 1 maksimal 6 , bergantung pada susunan, dan perlu dicantumkan dalam urutan menaik.

  • Jika LEVEL klausa tidak disediakan, default 1 maksimum untuk pemeriksaan diasumsikan.
  • Jika LEVEL ditentukan tanpa menggunakan rentang, pengubah opsional diizinkan.
  • ASC (default) mengembalikan bobot tanpa modifikasi apa pun.
  • DESC mengembalikan bobot bitwise-inverted.
  • REVERSE mengembalikan bobot dalam urutan terbalik.

Contoh

Berikut ini contoh dasarnya:

SELECT HEX(WEIGHT_STRING('z'));

Hasil:

+-------------------------+
| HEX(WEIGHT_STRING('z')) |
+-------------------------+
| 005A                    |
+-------------------------+

Di sini, kami menggunakan HEX() berfungsi untuk mewakili hasil yang tidak dapat dicetak dalam format heksadesimal.

AS Klausa

Berikut ini contoh menggunakan AS klausa untuk mentransmisikan string input ke jenis dan panjang tertentu.

SET @str = 'z';
SELECT 
  HEX(WEIGHT_STRING(@str AS CHAR(3))) 'Char 3',
  HEX(WEIGHT_STRING(@str AS CHAR(8))) 'Char 8',
  HEX(WEIGHT_STRING(@str AS BINARY(3))) 'Binary 3',
  HEX(WEIGHT_STRING(@str AS BINARY(8))) 'Binary 8';

Hasil (menggunakan keluaran vertikal):

  Char 3: 005A00200020
  Char 8: 005A0020002000200020002000200020
Binary 3: 7A0000
Binary 8: 7A00000000000000

Kolasi

Dua contoh berikut menunjukkan bagaimana string dapat memiliki bobot string yang berbeda, tergantung pada susunan yang digunakan.

Susunan yang digunakan dalam contoh pertama tidak peka huruf besar-kecil. Susunan yang digunakan dalam contoh kedua peka huruf besar/kecil.

SET @upper = _latin1 'PLAY' COLLATE latin1_general_ci;
SET @lower = lcase(@upper);
SELECT 
  @upper 'String', 
  HEX(@upper) 'Hex', 
  HEX(WEIGHT_STRING(@upper)) 'Weight String'
UNION ALL
SELECT 
  @lower, 
  HEX(@lower), 
  HEX(WEIGHT_STRING(@lower));

Hasil:

+--------+----------+---------------+
| String | Hex      | Weight String |
+--------+----------+---------------+
| PLAY   | 504C4159 | 8F7941AA      |
| play   | 706C6179 | 8F7941AA      |
+--------+----------+---------------+

Dan inilah contoh yang sama, kecuali dengan susunan yang peka huruf besar/kecil.

SET @upper = _latin1 'PLAY' COLLATE latin1_general_cs;
SET @lower = lcase(@upper);
SELECT 
  @upper 'String', 
  HEX(@upper) 'Hex', 
  HEX(WEIGHT_STRING(@upper)) 'Weight String'
UNION ALL
SELECT 
  @lower, 
  HEX(@lower), 
  HEX(WEIGHT_STRING(@lower));

Hasil:

+--------+----------+---------------+
| String | Hex      | Weight String |
+--------+----------+---------------+
| PLAY   | 504C4159 | 8F7941AA      |
| play   | 706C6179 | 907A42AB      |
+--------+----------+---------------+

Argumen Null

Melewati null mengembalikan null :

SELECT WEIGHT_STRING(null);

Hasil:

+---------------------+
| WEIGHT_STRING(null) |
+---------------------+
| NULL                |
+---------------------+

Argumen Tidak Ada

Memanggil WEIGHT_STRING() dengan jumlah argumen yang salah, atau tanpa memberikan argumen apa pun menghasilkan kesalahan:

SELECT WEIGHT_STRING();

Hasil:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ')' at line 1

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana CAST() Bekerja di MariaDB

  2. MariaDB JSON_MERGE_PRESERVE() Dijelaskan

  3. Bagaimana UTC_TIME() Bekerja di MariaDB

  4. Bagaimana UUID_SHORT() Bekerja di MariaDB

  5. Bagaimana TIDAK REGEXP Bekerja di MariaDB