Esittely

Kun hallinnoit tietoja PostgreSQL:ssä, tulet huomaamaan, että NULL-arvot voivat olla hieman hankalia käsitellä. Esimerkiksi useimmat lausekkeet palauttavat arvon NULL, kun jokin lausekkeen elementti on NULL. Miten voimme välttää joitakin NULL-arvoihin liittyviä vaikeuksia? Tämän kaksiosaisen sarjan ensimmäisessä artikkelissa selitimme, miten PostgreSQL:n COALESCE-funktiota voidaan käyttää NULL-arvojen testaamiseen ja NULL-arvojen korvaamiseen toisella arvolla. Tässä artikkelissa jatketaan siitä, mihin jäimme, ja jatketaan keskustelua COALESCE-funktiosta ja sen sovelluksista PostgreSQL:ssä.

Edellytykset

Voit varmistaa, että PostgreSQL on jo asennettu koneellesi, ennen kuin yrität seurata tämän artikkelin esimerkkejä. Sinulla tulisi myös olla jonkin verran PostgreSQL:n perustietoja, jotta voit ymmärtää COALESCE-funktion esimerkkejä.

COALESCE psql-komentoriviliittymässä

Edellisessä artikkelissa selitimme, miten pääset käsiksi PostgreSQL:n komentoriviliittymään psql. Meidän on jälleen kerran mentävä psql-komentorivikonsoliin kokeillaksemme joitakin COALESCE-esimerkkejä.

Aloitetaan alla olevasta yksinkertaisesta esimerkistä:

1
SELECT COALESCE ( ’omena’ , ’päärynä’ , ’mansikka’);

Kyselyn tulosteeksi tulee:

1
2
3
COALESCE
———-
apple

Kuten huomaat, palautettu tuloste on ’omena’, koska se on argumenttilistan ensimmäinen ei-NULL-arvo.

Jos meillä on NULL-arvo listan ensimmäisenä elementtinä, COALESCEfunktio ohittaa sen ja etsii ensimmäisen arvon, joka ei ole NULL. Näemme, miten tämä toimii seuraavassa kyselyssä:

1
SELECT COALESCE ( NULL, ’omena’ , ’päärynä’ , ’mansikka’);

Tulostulos on:

1
2
3
4
COALESCE
———-.
apple
(1 ROW)

Käytä PostgreSQL COALESCE aikaleima null

Jatkossa esimerkissämme, yritämme käyttää COALESCE-funktiota timestamp-tietotyypin kanssa.

Aluksi meidän on luotava toinen taulukko PostgreSQL:ään:

1
2
3
4
5
6
7
CREATE TABLE books(
book_id INT PRIMARY KEY NOT NULL,
book_name VARCHAR NOT NULL,
quantity INT,
price REAL,
year_released TIMESTAMP
);

Meidän on myös lisättävä tietueet books-tauluun, jonka juuri loimme:

1
2
3
4
5
6
7
INSERT INTO kirjat(kirjan_nimi, määrä, hinta, julkaisuvuosi)
VALUES
(’Kirja1’, 12, 60, ’2015-07-21 09:10:25+8’),
(’Kirja2’, 5, 55, ’2018-02-12 15:40:15+8’),
(’Book3’, 10, 90, ’2017-11-12 00:10:11+8’),
(’Book4’, 26, 47, NULL),
(’Book5’, 2, 83, ’2019-03-05 03:05:08+8’);

Huomaa, että lisäsimme taulukkoon NULL-arvon sarakkeeseen year_released, jonka tietotyyppi on timestamp.

Ajatellaanpa, että haluaisimme saada kunkin kirjan kokonaishinnan. Saadaksemme tämän tiedon, kerromme kahden sarakkeen arvot: quantity ja price. Alla oleva kysely näyttää, miten tämä tehdään:

1
2
SELECT book_id, book_name, ( quantity * price ) AS total_price
FROM books;

Kyselyn tuloste näyttää seuraavalta:

1
2
3
4
5
6
7
8
kirjan_id | kirjan_nimi | kirjan_nimi | hinnan_yhteenlaskettu
———+———–+————-.
1 | Kirja1 | 720
2 | Kirja2 | 275
3 | Kirja3 | 900
4 | Kirja4 | 1222
5 | Kirja5 | 166
(5 ROWS)

Katsotaan books-taulun sisältöä tällä kyselyllä:

1
SELECT * FROM books;

Tuloste näyttäisi tältä:

1
2
3
4
5
6
7
8
kirjan_id | kirjan_nimi | määrä | hinta | julkaisuvuosi
———+———–+———-+——-+———————
1 | Kirja1 | 12 | 60 | 2015-07-21 09:10:25
2 | Kirja2 | 5 | 55 | 2018-02-12 15:40:15
3 | Kirja3 | 10 | 90 | 2017-11-12 00:10:11
4 | Kirja4 | 26 | 47 |
5 | Kirja5 | 2 | 83 | 2019-03-05 03:05:08
(5 riviä)
  • Huomaa, että neljännen rivin viimeisessä sarakkeessa on NULL-arvo. Voimme muuttaa tämän käyttämään sen sijaan muuta kuin NULL-arvoa käyttämällä COALESCE-funktiota:
1
2
SELECT book_id, book_name,
COALESCE(year_released, CURRENT_TIMESTAMP) FROM books;

Tuloste näyttää seuraavalta:

1
2
3
4
5
6
7
8
book_id | book_name | COALESCE
———+———–+——————————-
1 | Book1 | 2015-07-21 09:10:25-04
2 | Kirja2 | 2018-02-12 15:40:15-05
3 | Kirja3 | 2017-11-12 00:10:11-05
4 | Kirja4 | 2020-02-13 06:20:41.239926-05
5 | Book5 | 2019-03-05 03:05:08-05
(5 ROWS)

Conclusion

Tässä kaksiosaisessa artikkelisarjassa olemme tutustuneet perusteellisesti PostgreSQL:n COALESCE-funktioon. Olemme näyttäneet useita esimerkkejä siitä, miten tätä funktiota voidaan käyttää tietojen NULL-arvojen testaamiseen ja tarvittaessa korvaamiseen ei-NULL-arvolla. Käyttämällä näitä esimerkkejä oppaana olet valmis sisällyttämään COALESCE-funktion omiin PostgreSQL-lauseisiisi.

Vastaa

Sähköpostiosoitettasi ei julkaista.