94 / 100

CAST

Ma'lumot turlarini o'zgartirish

Ushbu qo'llanmada PostgreSQLda bir ma'lumot turidagi qiymatni boshqa ma'lumot turiga o'zgartirish (toifa keltirish / type casting) uchun CAST() funksiyasi va :: operatoridan qanday foydalanishni o'rganasiz.

Toifa keltirish (Type Casting) nima?

Toifa keltirish (Type casting) — bu qiymatni bir ma'lumot turidan boshqasiga (masalan, matndan butun songa, satrdan sanaga) aylantirish jarayonidir.

PostgreSQL toifa keltirish uchun ikkita sintaksisni taqdim etadi:

  1. SQL standarti bo'yicha CAST() funksiyasi:
    query.sql
    CAST(expression AS target_type)
    
  2. PostgreSQLning qulay qisqa operatori :::
    query.sql
    expression::target_type
    

Ikkala usul ham bir xil ishlaydi, biroq :: operatori qisqa va qulay bo'lgani uchun PostgreSQLda juda keng qo'llaniladi.

Amaliy misollar

1) Matnni butun songa o'girish (String -> Integer)

query.sql
SELECT CAST('100' AS INT) AS num1, '250'::INT AS num2;

Natija:

matn
 num1 | num2 
------+------
  100 |  250

Agar matn ichida raqam bo'lmagan belgilar bo'lsa (masalan '100x'), PostgreSQL sintaktik xatolik beradi:

query.sql
SELECT '100x'::INT;
-- ERROR: invalid input syntax for type integer: "100x"

2) Matnni kasr songa o'girish (String -> Decimal / Double)

query.sql
SELECT CAST('19.99' AS NUMERIC(10, 2)) AS price1, '99.95'::DOUBLE PRECISION AS price2;

Natija:

matn
 price1 | price2 
--------+--------
  19.99 |  99.95

3) Matnni mantiqiy turga o'girish (String -> Boolean)

PostgreSQL 'true', 't', 'yes', 'y', '1' qiymatlarini true ga, 'false', 'f', 'no', 'n', '0' qiymatlarini esa false ga oson o'giradi:

query.sql
SELECT
  'true'::BOOLEAN AS b1,
  't'::BOOLEAN AS b2,
  'false'::BOOLEAN AS b3,
  '0'::BOOLEAN AS b4;

Natija:

matn
 b1 | b2 | b3 | b4 
----+----+----+----
 t  | t  | f  | f

4) Matnni sana va vaqtga o'girish (String -> Date / Timestamp)

query.sql
SELECT
  CAST('2026-09-22' AS DATE) AS date_val,
  '2026-09-22 14:30:00'::TIMESTAMP AS timestamp_val;

Natija:

matn
  date_val  |    timestamp_val    
------------+---------------------
 2026-09-22 | 2026-09-22 14:30:00

5) Oraliqqa o'girish (String -> Interval)

Matnni vaqt oralig'iga (interval) aylantirib, sanalarga qo'shish yoki ayirish mumkin:

query.sql
SELECT '2026-01-01'::DATE + '1 month 15 days'::INTERVAL AS future_date;

Natija:

matn
     future_date     
---------------------
 2026-02-16 00:00:00

6) Sonlarni matnga o'girish (Number -> Text / Varchar)

query.sql
SELECT 12345::TEXT AS text_number;

7) Ketma-ket toifa keltirish (Chained Casting)

Ba'zida qiymatni bir turdan ikkinchisiga to'g'ridan-to'g'ri o'girib bo'lmaydi. Masalan, XML yoki murakkab JSON qiymatini oldin TEXT ga, so'ngra INT yoki DECIMAL ga o'girish:

query.sql
SELECT ('123.45'::TEXT)::NUMERIC;

Xulosa

  • CAST(val AS type) — SQL standartidagi toifa keltirish funksiyasidir.
  • val::type — PostgreSQLdagi tezkor va ixcham toifa keltirish operatoridir.
  • Noto'g'ri formatdagi qiymatlarni keltirishda PostgreSQL qat'iy xatolik qaytaradi.