SQL Tips: Case sensitive SQL:n WHERE-lauseessa

Tässä esimerkissä on yksinkertainen taulu, jossa dataa näin:

Normaalisti esimerkiksi alla oleva kysely palauttaa rivit riippumatta tekstin kirjainkoosta:

Jos halutaan hakea vain tietyllä kirjainkoolla olevat rivit, pitää WHERE-ehdon perään lisätä oikea COLLATE-osuus. Tässä esimerkissä voidaan käyttää COLLATE SQL_Latin1_General_CP1_CS_AS. Tärkeintä on, että COLLATE-osuudesta löytyy _CS, joka tarkoittaa Case Sensitiveä. _AS (Accent Sensitive) tarkoittaa sitä, että a ei ole sama asia, kuin ä.

Kaikki eri COLLATE vaihtoehdot voit tarkistaa kyselyllä:

SELECT name, description 
FROM sys.fn_helpcollations()

Nyt kysely palauttaa vain halutulla kirjainkoolla olevat rivit:

Jos halutaan, että Tekstiarvo-kentässä mahdollisesti olevat indeksoinnit vaikuttaisivat, pitää rivi lisätä vielä ilman COLLATE-osuutta SQL-lauseeseen.

Hyppy tuntemattomaan - miten minusta tuli Oiwa?

Mikä saa 40+ olevan naisen jättämään 15 vuotta kestäneen työuran ja siirtymään yritykseen, joka on yli 300 km päässä kotoa? Paikkakunta on täysin uusi. Ei yhtään tuttua. Onko se silkkaa hulluutta vai ennakkoluulotonta rohkeutta kokeilla jotain uutta?

Kaikki sai alkunsa viime keväänä, kun selailin netistä ohjelmointialan työpaikkoja. Silmiin sattui erilainen työpaikkailmoitus. YouTube-videolla kerrottiin lenkkeilyn lomassa, että etsitään ohjelmistoasiantuntijaa. Siltä istumalta mieleen paloi ajatus siitä, että tuohon porukkaan haluaisin kuulua. Parin päivän pohtimisen jälkeen soitin Hannalle. Päädyttiin miettimään puolin ja toisin kesän yli. Syksyllä palattiin asiaan ja sovittiin haastattelu etänä. Jo haastattelun aikana tuli tunne, että kuulun joukkoon. Missään vaiheessa ei tullut epämiellyttävää oloa, vaan jutustelu sujui rennosti. Tämän haastattelun perusteella Oiwalla uskallettiin tehdä päätös ottaa minut töihin ilman, että olivat edes tavanneet kasvotusten. Kuulostaa jotenkin uskomattomalta, kun tänä päivänä vaaditaan usein, että uuden hakijan kanssa keskustellaan useampaan otteeseen soveltuvuustesteineen. Arvostan sitä, että yrityksellä on rohkeutta tehdä päätös nopeasti, jos haastattelun perusteella tulee tunne, että tämä henkilö on meille sopiva.

Nyt olen ollut reilun kuukauden Oiwalla töissä Developer, BI & Data -nimikkeellä. Mikä on muuttunut työssä? Suurin ero on, että ennen tein yrityksen sisäiseen käyttöön, mutta Oiwalla töitä tehdään ulkoisille asiakkaille. Omaan käyttöön tehtäessä määrittelyt tahtoi olla aika epämääräiset eikä niitä jaettu pienempiin osiin. Oli vain epämääräinen tarve, johon piti löytää ratkaisu. Uudessa työssä määrittelyt on tarkat ja kokonaisuus on jaettu pieniin tehtäviin, jotka on helpompi hallita. Asiakkaan kanssa on käyty tarkkaan läpi mitä halutaan ja mitä se vaatii. Uutena on tullut myös tuntien merkkaaminen eri projekteille. Se vaatii uutta asennoitumista. Vanhassa työssä tein kehitystä aika pitkälti yksin. Nyt on muitakin, jotka tekee samaa, niin voi keskustella toteutustavoista. Itselle on ollut vaikea hyväksyä, että ei olekaan hyödyksi, vaan aikaa menee uusien asioiden opetteluun. Se, että asiat ei tulekaan selkärangasta, lisää epävarmuutta omaa tekemistä kohtaan. Aiemmin käyttäjien ylläpito ja tuki vei paljon työaikaa. Yhteydenottoja tuli sekä puhelimella että sähköpostilla. Uudessa työssä niitä ei ole ollut. Saan keskittyä rauhassa kehitystyöhön. Yksi syy työpaikan vaihtoon oli kiinnostus ja halu kehittyä BI & Data asiantuntijaksi. Sen parempaa tapaa ei olekaan kuin päästä mukaan porukkaan, joka on tehnyt töitä asian kimpussa jo vuosikausia. Olen jo nyt oppinut paljon uutta ja vielä en ole päässyt edes kunnolla alkuun.

Ensimmäiset kaksi kuukautta olen Seinäjoella vierihoidossa. Tutustun uusiin työkavereihin ja pääsen paremmin sisälle Oiwan tapoihin tehdä. Sen jälkeen teen töitä etänä Kuopiosta käsin. Käyn Seinäjoella yhden päivän kerran kuukaudessa. Aiemmin en ole etätöitä tehnyt, joten sekin tulee uutena. Olen aika sosiaalinen tapaus, joten saa nähdä millaisia tunteita tuo herättää. Onneksi nykypäivänä on helppo pitää yhteyttä välimatkasta huolimatta. Paljon asiat on kuitenkin kiinni itsestä ja omasta asenteesta.

En ole katunut päätöstäni. Minut on otettu hyvin mukaan porukkaan. Iso kiitos siitä Oiwalaisille. Oiwan ilmapiiri on rento, rauhallinen ja huumoria riittää. On ymmärretty, että vaikka minulla on jo pitkä ura takana ohjelmointialalla, niin paljon tulee uutta ja sen oppimiseen menee aikaa. Oman kokemukseni perusteella kannattaa uskaltaa tehdä rohkeita päätöksiä, vaikka tuttu ja turvallinen houkuttaa. Uusi on samaan aikaan innostavaa ja pelottavaa sekä tuo oman stressinsä. Voin olla ylpeä rohkeudestani ja ei tarvitse harmitella jälkikäteen. Jos ajatus jostain uudesta houkuttaa ja siihen tulee mahdollisuus, niin ei muuta kuin rohkeasti hyppy tuntemattomaan.


Piia on Oiwan uusin asiantuntija. Käy tutustumassa Piiaan paremmin.

SQL Tips: Harmeja NULL-arvosta

SQL-kyselyissä NULL-arvot aiheuttavat usein harmeja. On tärkeää ymmärtää, että NULL tarkoittaa puuttuvaa arvoa. Se ei tarkoita välilyöntiä eikä nollaa vaan tuntematonta arvoa. Jos mahdollista, pyri muuttamaan NULL-arvot aina joko nollaksi (0) tai tyhjäksi (’’) niin säästyt monelta harmilta.

Totuus on, että tauluista löytyy kuitenkin aina myös NULL-arvoja. Siksi onkin syytä huomioida, ettei NULL käyttäydy samoin kuin muut arvot.

Tässä ensin esimerkkitaulujen tiedot ja esimerkit NULL-arvojen toiminnasta.

Jos laskukaavassa on mukana NULL-arvo palauttaa laskenta aina NULL. AlennettuHinta jää siis laskennassa NULL-arvoksi, koska Alennus on NULL.

NOT IN kyselyssä Fakta-taulun TuoteID on NULL-arvo, joten seuraava lause ei palauta mitään vaikka periaatteessa TuoteID 223 puuttuukin Fakta-taulusta.

NULL ei toimi taulujen liitoksissa (JOIN tai MERGE). Vaikka molempien taulujen avainkentässä olisi NULL, niin se ei yhdistä rivejä ja rivi jää puuttumaan. Esim. jos Fakta2 taulu olisi samanlainen taulu kuin Fakta ja yhdistetään ne TuoteID sekä Yhtio kenttien avulla. Kysely ei palauta yhtään riviä vaikka TuoteID 222 löytyykin molemmista tauluista ja Yhtio molemmissa on NULL.

Merge lauseessa syntyy joka kerta uudet rivit, koska NULL-arvo ei yhdistä avaimia.

Ongelman voi kiertää NULL tarkistuksilla, kuten esim. lisäämällä IS NULL -ehdot tai käyttämällä COALESCE()-funktiota.

Tai

Saatat myös ymmärtää NULL-arvon ja tyhjän arvon eron seuraavan havainnollistavan kuvan avulla:


Kuva: DevRant