Təsəvvür elə ki, iki ədəd toplamaq istəyirsən, amma parametrlərdən biri string kimi saxlanılıb. Və ya, məsələn, ili görə filter etmək istəyirsən, amma tarix tam formatda, vaxtla birlikdə saxlanılıb. PostgreSQL sənin bu ideyana o qədər də sevinməyəcək və sənə lazım olacaq ki, verilənləri düzgün tipə gətirəsən.
Tip dəyişmək kömək edir:
- Verilənləri hesablama üçün rahat şəkildə işləməyə.
- Daha oxunaqlı və strukturlaşdırılmış məlumatlar yaratmağa, məsələn, export və ya analiz üçün.
- Verilənlərin tipinin uyğun olmaması ilə bağlı səhvləri aradan qaldırmağa.
Verilənlərin tipini dəyişməyin əsasları: CAST() və ::
1. CAST() — hər tip dəyişmənin böyük qardaşı
CAST() funksiyası — bir tipdən digər tipə dəyəri çevirməyin "rəsmi" yoludur. O, universal tərcüməçi kimidir.
Sintaksis:
CAST(dəyər AS hədəf_tip)
Nümunə 1: String-i ədədə çevirmək.
SELECT CAST('123' AS INTEGER); -- Nəticə: 123
Nümunə 2: Ədədi string-ə çevirmək.
SELECT CAST(123 AS TEXT); -- Nəticə: '123'
Nümunə 3: Tarixi string-ə çevirmək.
SELECT CAST(NOW() AS TEXT); -- Nəticə: '2023-10-25 15:00:00.000000'
2. :: operatoru — qısa alternativ
Əgər CAST() sənə bir az uzun görünürsə, PostgreSQL :: sintaksisini təklif edir. Bu, tip dəyişməyin qısa və məşhur yoludur.
Sintaksis:
dəyər::hədəf_tip
Nümunə 1: String-i ədədə çevirmək.
SELECT '123'::INTEGER; -- Nəticə: 123
Nümunə 2: Ədədi string-ə çevirmək.
SELECT 123::TEXT; -- Nəticə: '123'
Nümunə 3: Tarixi string-ə çevirmək.
SELECT NOW()::TEXT; -- Nəticə: '2023-10-25 15:00:00.000000'
Tip dəyişmənin real nümunələri
1. Ədədlər və string-lər arasında çevirmə
Tutaq ki, səndə students adlı cədvəl var və student_id sütunu string kimi saxlanılır, amma sən onu ədədlə müqayisə etmək istəyirsən. Tip dəyişmədən heç nə alınmayacaq.
| student_id | first_name | last_name | birth_date | grade |
|---|---|---|---|---|
| 101 | Alex | Lin | 2008-03-15 | 9 |
| 102 | Maria | Chi | 2009-07-22 | 8 |
| 103 | Axel | Ivy | 2007-11-30 | 10 |
| 104 | Nat | Sok | 2008-01-18 | 9 |
| 105 | Pol | Frez | 2009-05-05 | 8 |
Ona görə də sorğuda student_id sütununu açıq şəkildə ədədə çevirmək lazımdır:
SELECT *
FROM students
WHERE student_id::INTEGER = 101;
CAST() ilə eyni sorğu:
SELECT *
FROM students
WHERE CAST(student_id AS INTEGER) = 101;
Tarixləri çevirmək
Tarixin bir hissəsini çıxarmaq və ya onu string-ə çevirmək lazım olanda, tip dəyişmək yenə köməyə gəlir. Məsələn, səndə courses adlı cədvəl var və kursların başlama tarixi start_date sütununda saxlanılır.
| course_id | course_name | start_date |
|---|---|---|
| 1 | Python-a giriş | 2025-01-15 |
| 2 | SQL əsasları | 2025-03-01 |
| 3 | Verilənlərin analizi | 2025-05-10 |
| 4 | Veb-inkişaf | 2025-06-20 |
| 5 | Maşın öyrənməsi | 2025-09-05 |
Nümunə: İli ədəd kimi çıxarmaq.
SELECT start_date::DATE, start_date::TEXT, start_date::TIMESTAMP
FROM courses;
Nəticə belə olacaq:
| start_date (DATE) | start_date (TEXT) | start_date (TIMESTAMP) |
|---|---|---|
| 2025-01-15 | 2025-01-15 | 2025-01-15 00:00:00 |
| 2025-03-01 | 2025-03-01 | 2025-03-01 00:00:00 |
| 2025-05-10 | 2025-05-10 | 2025-05-10 00:00:00 |
| 2025-06-20 | 2025-06-20 | 2025-06-20 00:00:00 |
| 2025-09-05 | 2025-09-05 | 2025-09-05 00:00:00 |
Nümunə: Tarixi "təmiz string"-ə çevirmək.
SELECT TO_CHAR(start_date, 'DD-MM-YYYY')
Nəticə belə olacaq:
| to_char |
|---|
| 15-01-2025 |
| 01-03-2025 |
| 10-05-2025 |
| 20-06-2025 |
| 05-09-2025 |
Səhv: Tip dəyişmə nə vaxt işləmir?
Tip dəyişmə fəndi həmişə işləmir. Bəzən PostgreSQL açıq şəkildə göstərir ki, "sənin nə istədiyini başa düşmür". Klassik nümunə: sən elə bir text-i ədədə çevirmək istəyirsən ki, orada əlavə simvollar var.
Səhv nümunəsi:
SELECT '123abc'::INTEGER;
-- SƏHV: integer tipi üçün input sintaksisi səhvdir: "123abc"
Belə problemlərin qarşısını almaq üçün əvvəlcədən əmin ol ki, verilənlər həqiqətən də hədəf tipə çevrilə bilər. Məsələn, regular expressions və ya əlavə yoxlamalardan istifadə edə bilərsən.
GO TO FULL VERSION