75 / 100

SIMILAR TO

SQL regulyar ifodalari

Ushbu qo'llanmada PostgreSQLda ustundagi qiymatni muntazam ifoda (regex) va SQL shablonlari aralashmasi asosida qidirish uchun SIMILAR TO operatoridan qanday foydalanishni o'rganasiz.

PostgreSQL SIMILAR TO operatoriga umumiy nuqtai

PostgreSQLda SIMILAR TO operatori regulyar ifoda butun qatorga to'liq mos kelsagina true qiymatini qaytaradi.

SIMILAR TO operatorining sintaksisi:

query.sql
SELECT
  column1,
  column2
FROM
  table_name
WHERE
  column1 SIMILAR TO pattern;

Ushbu sintaksisda SIMILAR TO operatori pattern shabloni column1 qiymatiga boshidan oxirigacha to'liq mos tushsa true, aks holda false qaytaradi.

Bu xususiyat matnning istalgan qismiga mos kelishi mumkin bo'lgan POSIX regex (~) operatoridan farq qiladi.

Regulyar ifodalarda ishlatiladigan metasimvollardan tashqari, SIMILAR TO operatorida SQLdagi _ (bitta belgi) va % (nol yoki bir nechta belgilar) shablon belgilaridan ham foydalanish mumkin.

Odatdagi regexda nuqta (.) yangi qatordan tashqari istalgan belgiga mos keladigan metasimvol hisoblanadi, biroq SIMILAR TO operatorida nuqta oddiy belgi sifatida qaraladi, istalgan bitta belgi uchun esa _ ishlatiladi.

Namunaviy jadval

Misollarni bajarish uchun quyidagi products jadvali va ma'lumotlaridan foydalanamiz:

query.sql
DROP TABLE IF EXISTS products;

CREATE TABLE products (
    product_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    description TEXT
);

INSERT INTO products (product_name, description) VALUES
('Samsung Galaxy S24', 'Flagship smartfon 10% chegirma bilan'),
('Apple iPhone 15', 'Eng yangi A16 Bionic protsessor'),
('Sony Xperia 1 VI', 'Professional kamera smartfoni'),
('Apple iPhone 15 Pro Max', 'Titan korpus va periskop zoom'),
('Samsung QN900C Neo QLED', '8K televizor'),
('LG G3 OLED', 'Mukammal qora rang va 120Hz'),
('Sony HT-A7000 Soundbar', 'Dolby Atmos saundbar'),
('Bose SoundLink Max', 'Portativ bluetooth karnay'),
('Lenovo ThinkPad X1 Carbon', 'Biznes noutbuk');

PostgreSQL SIMILAR TO operatoriga misollar

Quyidagi SELECT so'rovi SIMILAR TO operatori yordamida nomi regulyar ifoda shabloniga mos keladigan mahsulotlarni tanlab oladi:

query.sql
SELECT
  product_name
FROM
  products
WHERE
  product_name SIMILAR TO '\w+\s*(Galaxy|iPhone)\s*\w+';

Natija:

matn
    product_name    
--------------------
 Samsung Galaxy S24
 Apple iPhone 15

Ushbu '\w+\s*(Galaxy|iPhone)\s*\w+' shablonining tahlili:

  • \w+ — bir yoki bir nechta so'z belgisi.
  • \s* — nol yoki bir nechta probel.
  • (Galaxy|iPhone) — aynan Galaxy yoki iPhone so'zi.
  • \s* — probellar.
  • \w+ — bir yoki bir nechta so'z belgisi (masalan S24 yoki 15).

Shunday qilib, shablon boshlanishi bitta so'z, o'rtasida Galaxy yoki iPhone va oxirida yana bitta so'zdan iborat bo'lgan to'liq satrlarga mos keladi.

NOT SIMILAR TO operatori

SIMILAR TO natijasini inkor qilish uchun NOT operatoridan foydalaniladi:

query.sql
SELECT
  column1,
  column2
FROM
  table_name
WHERE
  column1 NOT SIMILAR TO pattern;

NOT SIMILAR TO operatori ustun qiymati shablonga mos kelmasa true, mos kelsa false qaytaradi.

Masalan, quyidagi so'rov nomi oxirida bir yoki bir nechta raqam bilan tugamaydigan barcha mahsulotlarni topadi:

query.sql
SELECT
  product_name
FROM
  products
WHERE
  product_name NOT SIMILAR TO '%\d+';

Natija:

matn
       product_name        
---------------------------
 Sony Xperia 1 VI
 Apple iPhone 15 Pro Max
 Samsung QN900C Neo QLED
 LG G3 OLED
 Sony HT-A7000 Soundbar
 Bose SoundLink Max
 Lenovo ThinkPad X1 Carbon

Bu misolda:

  • % — nol yoki undan ortiq ixtiyoriy belgilar (SQL wildcard).
  • \d+ — bir yoki undan ortiq raqamlar.

Shunday qilib, %\d+ shabloni raqam bilan tugaydigan satrlarni ifodalaydi. NOT SIMILAR TO esa raqam bilan tugamaydiganlarini saralab beradi.

SIMILAR TO operatorida ESCAPE opsiyasi

LIKE operatorida bo'lgani kabi, SIMILAR TO bilan ham maxsus belgilarni (masalan % yoki _) oddiy matn sifatida qidirish uchun ESCAPE bandidan foydalanishingiz mumkin:

query.sql
SELECT
  column1,
  column2
FROM
  table_name
WHERE
  column1 SIMILAR TO pattern ESCAPE escape_character;

Masalan, quyidagi so'rov ESCAPE yordamida tavsifida aynan % belgisi qatnashgan mahsulotlarni topadi:

query.sql
SELECT
  product_name,
  description
FROM
  products
WHERE
  description SIMILAR TO '%$%%' ESCAPE '$';

Natija:

matn
    product_name    |             description             
--------------------+-------------------------------------
 Samsung Galaxy S24 | Flagship smartfon 10% chegirma bilan

Bu yerda:

  • Birinchi va oxirgi % belgilari ixtiyoriy matnni bildiruvchi SQL wildcard belgilaridir.
  • O'rtadagi ikkinchi % esa qidirilayotgan oddiy foiz belgisidir. Unga escape qilish uchun oldiga $ qo'yilgan va ESCAPE '$' opsiyasi belgilangan.

Xulosa

  • SIMILAR TO operatori SQL LIKE wildcardlari (%, _) va regulyar ifoda qoidalarini birlashtiradi.
  • SIMILAR TO satrning faqat bir qismiga emas, balki butun satrga to'liq mosligini tekshiradi.
  • Shablonga mos kelmaslikni tekshirish uchun NOT SIMILAR TO ishlatiladi.
  • Maxsus belgilarni oddiy matn sifatida tekshirish uchun ESCAPE bandidan foydalaniladi.