Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: MSSQL: Vain päivämäärien vertailu

Sivun loppuun

mlj195 [18.08.2017 14:18:56]

#

Siis seuraava ongelma tuli vastaan:

Mulla on tilanne raportoinnissa, missä pitäisi saada kahden päivämäärän erotus laskettua. Tämän olen tehnyt DATEFIFF -käskyllä. Erotus näkyy omana sarakkeenaan 'ero'. Lisäksi tarvitsisin omalle sarakkeelleen tekstin, missä näkyy 'AJOISSA' tai 'MYÖHÄSSÄ'.

Yritin saada tätä toimimaan CASE -käskyllä,

Tilanne = CASE
WHEN pvm2 < pvm1 THEN 'AJOISSA'
ELSE 'MYÖHÄSSÄ'
END

Käsky toimi muuten oikein mutta päivämäärien kanssa on sellainen ongelma, että pvm1 näyttää oletuskellonaikana aina 00:00:00 ja pvm2 näyttää todellisen kellonajan. Eli siis vaikka itse päivämäärä olisi sama (kellonaikaa ei siis tarvitsisi ottaa huomioon ollenkaan, mutta se tulee automaattisesti mukaan), tulee tekstiksi 'MYÖHÄSSÄ'.

Mitenköhän saisin joko kellonajan olemaan tulematta ollenkaan tai sitten että päivämäärien erotuksen tarvitsisi olla tarpeeksi suuri, jotta teksti 'MYÖHÄSSÄ' tulee?

Kokeilin myös

Tilanne = CASE
WHEN 'ero' < 0 THEN 'AJOISSA'
ELSE 'MYÖHÄSSÄ'
END

mutta jostain syystä tuo ei toiminut ollenkaan...

Ohjelmana on Microsoft SQL Report Builder. Pahoittelut erittäin huonosti selitetystä ongelmasta, toivottavasti joku tajuaa mitä ajan takaa :D

Metabolix [18.08.2017 14:25:41]

#

Ongelman pitäisi ratketa DATEONLY-funktiolla, eli muokkaa ensimmäistä koodiasi seuraavasti: DATEONLY(pvm2) < DATEONLY(pvm1).

mlj195 [21.08.2017 13:38:23]

#

Ei toimi... Tulee teksti "tarkista että syntaksi on oikein". Missähän menee vikaan?

Grez [21.08.2017 13:50:48]

#

Metabolixin vastaus on lienee jollekin muulle RDBMS:lle kuin MSSQL:lle.

Tämän tyylinen syntaksi voisi toimia MSSQL:llä (2008 ja uudemmat):

cast(pvm2 as date) < cast(pvm1 as date)

mlj195 [21.08.2017 14:19:17]

#

Ei ihan toiminut taaskaan.. Jos korjasin noin tuohon CASE -kohdan kaavaan, niin ei tullut mitään virhekoodeja, mutta ongelma ei silti korjaantunut...?

Onko muuten mitään mahdollisuutta saada tuota 'AJOISSA' ja 'MYÖHÄSSÄ' tekstiä tulemaan sen mukaan, mikä luku on 'ero' sarakkeessa? Jos se kävisi vähän helpommin...

Grez [21.08.2017 14:33:04]

#

Ehkä sulla on sitten muuten väärin tuo ehto? Esimerkiksi haluaisit verrata <= mutta olet kirjoittanut <

select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero, CASE WHEN cast(pvm2 as date) < cast(pvm1 as date) THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from #test
pvm1                     pvm2                     ero tilanne
2017-08-20 00:00:00.000  2017-08-21 14:27:19.113  1   MYÖHÄSSÄ
2017-08-21 00:00:00.000  2017-08-21 14:27:19.113  0   MYÖHÄSSÄ
2017-08-22 00:00:00.000  2017-08-21 14:27:19.113  -1  AJOISSA
select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero, CASE WHEN cast(pvm2 as date) <= cast(pvm1 as date) THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from #test
pvm1                     pvm2                     ero tilanne
2017-08-20 00:00:00.000  2017-08-21 14:27:19.113  1   MYÖHÄSSÄ
2017-08-21 00:00:00.000  2017-08-21 14:27:19.113  0   AJOISSA
2017-08-22 00:00:00.000  2017-08-21 14:27:19.113  -1  AJOISSA

mlj195 kirjoitti:

Onko muuten mitään mahdollisuutta saada tuota 'AJOISSA' ja 'MYÖHÄSSÄ' tekstiä tulemaan sen mukaan, mikä luku on 'ero' sarakkeessa? Jos se kävisi vähän helpommin...

Ei se varsinaisesti sen helpommin käy. Toki voit käyttää sitäkin.

Jos haluat käyttää nimenomaan ero -saraketta niin voit tehdä sen tekemällä näkymän (VIEW) ja kyselyn sille:

WITH Q AS (select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero from #test)
SELECT pvm1, pvm2, ero, CASE WHEN ero <= 0 THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from Q

Tai voit käyttää tuota DATEDIFF -funktiota osana CASEa:

select pvm1, pvm2, DATEDIFF(D,pvm1,pvm2) ero, CASE WHEN DATEDIFF(D,pvm1,pvm2) <= 0 THEN 'AJOISSA' ELSE 'MYÖHÄSSÄ' END tilanne from #test

mlj195 [21.08.2017 14:39:35]

#

Nyt sain tuon toimimaan, kiitokset kaikille avusta!

Osaisiko joku vielä selittää miten saisin kentän taustavärin määrättyä kentän arvon perusteella? Eli jos teksti 'MYÖHÄSSÄ' niin taustaväri esim. punainen ja jos 'AJOISSA', niin vihreä?

Grez [21.08.2017 14:48:53]

#

En ole ko. ohjelmaa käyttänyt, mutta eka osuma Googlella Adding Conditional Formatting (Report Builder 2.0)

Metabolix [21.08.2017 17:19:35]

#

Grez kirjoitti:

Metabolixin vastaus on lienee jollekin muulle RDBMS:lle kuin MSSQL:lle.

Luulin, että Report Builderin dokumentaatio koskisi Report Builderilla tehtäviä kyselyitä. Sori siitä.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta