CodeGym /Kurslar /SQL SELF /CAST() və :: ilə verilənlərin tipini dəyişmək — nümunələr...

CAST() və :: ilə verilənlərin tipini dəyişmək — nümunələr və incəliklər

SQL SELF
Səviyyə , Dərs
Mövcuddur

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()::

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.

Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION