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.

SQL Tips: INT-muotoisen kentän jakolaskut

Jakaessa kahta INT-tyyppistä kenttää keskenään tulos on aina myös INT ja vieläpä niin, että tulosta ei pyöristetä, vaan se katkaistaan.

Esim. alla oleva SQL-lause palauttaa vastaukseksi 1.

SELECT 9 / 5

Jos taas lauseen jompikumpi arvo konvertoidaan desimaaliksi esimerkiksi näin

SELECT 9 * 1.0 / 5

tai näin

SELECT CAST(9 as float) / 5

palauttaa SQL vastaukseksi 1,8.

Samoin toimii sisäänrakennetut aggregointifunktiot, esim. AVG.

Esim. Tässä yksinkertainen taulu, jossa int-tyyppisessä kentässä arvoja

Normaali AVG-funktio palauttaa keskiarvoksi 2.

Kun taas konvertoituna palauttaa näin

Desimaalin muuttamiseksi kannattaa valita kyselyyn sopiva suorituskykyisin keino