päiväyksistä vkonloput pois

otso

Pitäisi saada eräässä kyselyssä accessissa laskettua kahden ajan välinen aikaero tunteita, mutta luvuista pitäisi ottaa pois mahdolliset viikonloput?? onko tähän mitään tapaa? olen käyttänyt tähän asti DateDiff funktiota, mutta ei ainakaan itse löytänyt siitä tällaista ominaisuutta..

11

648

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • eakem

      ...millaisesta kyselystä on kyse.

      • eakem

        Tässä on yksi kyselyn malli:
        select * from taulu where format(pvm_kentta,'ddd') not in ('la','su');

        Nuo la ja su korvaat niillä päivillä jotka haluat jättää pois. Tosta jää lauantait ja sunnuntait pois. Jos access on eri kielinen (tai saattaa olla kiinni myös käyttiksen kieliasetuksista, en muista varmaksi) niin muutat noita 'la' ja 'su' vastaavasti.


      • otso
        eakem kirjoitti:

        Tässä on yksi kyselyn malli:
        select * from taulu where format(pvm_kentta,'ddd') not in ('la','su');

        Nuo la ja su korvaat niillä päivillä jotka haluat jättää pois. Tosta jää lauantait ja sunnuntait pois. Jos access on eri kielinen (tai saattaa olla kiinni myös käyttiksen kieliasetuksista, en muista varmaksi) niin muutat noita 'la' ja 'su' vastaavasti.

        minulla on siis taulukossa kaksi kenttää, aloitus-ja lopetusaika. minun pitäisi saada laskettua näiden kahden kentän välinen aikaero tunteina sillälailla, että viikonloppuja ei oteta huomioon. esim jos aloitusaika on 6.8.2004 23.45 (joka sattuu olemaan perjantai) ja lopetusaika on 9.8.2004 9.45 (maanantai) niin näiden välinen aikaero pitäisi olla 10 tuntia eikä 58 tuntia, jonka DateDiff laskee. Onko tähän olemassa mitään tapaa? Vieläkin parempi olisi jos pystyisi ohittamaan kaikki pyhäpäivät, mutta se taitaa jo olla aivan liian vaikeeta...


      • ...........
        otso kirjoitti:

        minulla on siis taulukossa kaksi kenttää, aloitus-ja lopetusaika. minun pitäisi saada laskettua näiden kahden kentän välinen aikaero tunteina sillälailla, että viikonloppuja ei oteta huomioon. esim jos aloitusaika on 6.8.2004 23.45 (joka sattuu olemaan perjantai) ja lopetusaika on 9.8.2004 9.45 (maanantai) niin näiden välinen aikaero pitäisi olla 10 tuntia eikä 58 tuntia, jonka DateDiff laskee. Onko tähän olemassa mitään tapaa? Vieläkin parempi olisi jos pystyisi ohittamaan kaikki pyhäpäivät, mutta se taitaa jo olla aivan liian vaikeeta...

        Ellen ole aivan väärässä, niin tuota et saa tehtyä suoraan tietokannassa, vaan se pitää tehdä jollain ohjelmointikielel, ihan helppo tommonen on tehdä.

        Otat eka kahden päivämäärän eron tolla DateDiffil tietokannasta (otat myös päivämäärä kenttien arvot mukaan) sit tarkastat ohjelmointikielelläsi onko siinä viikonloppuja välissä tai juhlapyhiä, jos on niin vähennät 24h*päivien lukumäärä, siis viikonlopussa 48h vähennys


        Ihan mielenkiinnosta mihkä sie tota tarttet?


      • osto
        ........... kirjoitti:

        Ellen ole aivan väärässä, niin tuota et saa tehtyä suoraan tietokannassa, vaan se pitää tehdä jollain ohjelmointikielel, ihan helppo tommonen on tehdä.

        Otat eka kahden päivämäärän eron tolla DateDiffil tietokannasta (otat myös päivämäärä kenttien arvot mukaan) sit tarkastat ohjelmointikielelläsi onko siinä viikonloppuja välissä tai juhlapyhiä, jos on niin vähennät 24h*päivien lukumäärä, siis viikonlopussa 48h vähennys


        Ihan mielenkiinnosta mihkä sie tota tarttet?

        tarvitsisin tätä tomintoa vaan erääseen hommaan missä pitäisi katsoa pitävätkö tietyt lähtövalmiustasot paikkansa. Siinä vain pitäisi skipata viikonloput. Tässä ohjelmointikielen käytössä on vain se ongelma, että minun tapauksessani se tieto pitäisi saada toimimaan automaattisesti kun taulukkoa taas joskus tulevaisuudessa päivitetään, joten jos teen se jotenkin muuten niin joudun aina siirtämään tiedot ensiksi omaan ohjelmaani ja takaisin ja siitä aiheutuu sitten hieman liikaa hommaa.. Mutta kiitoksia vaan avusta, yritän vielä keksiä jotain ratkaisuja ongelmaan.


      • Punikki & 7 hyypiötä
        osto kirjoitti:

        tarvitsisin tätä tomintoa vaan erääseen hommaan missä pitäisi katsoa pitävätkö tietyt lähtövalmiustasot paikkansa. Siinä vain pitäisi skipata viikonloput. Tässä ohjelmointikielen käytössä on vain se ongelma, että minun tapauksessani se tieto pitäisi saada toimimaan automaattisesti kun taulukkoa taas joskus tulevaisuudessa päivitetään, joten jos teen se jotenkin muuten niin joudun aina siirtämään tiedot ensiksi omaan ohjelmaani ja takaisin ja siitä aiheutuu sitten hieman liikaa hommaa.. Mutta kiitoksia vaan avusta, yritän vielä keksiä jotain ratkaisuja ongelmaan.

        >Tässä ohjelmointikielen käytössä on vain se ongelma, että minun tapauksessani se tieto pitäisi saada toimimaan automaattisesti kun taulukkoa taas joskus tulevaisuudessa päivitetään, joten jos teen se jotenkin muuten niin joudun aina siirtämään tiedot ensiksi omaan ohjelmaani ja takaisin ja siitä aiheutuu sitten hieman liikaa hommaa..

        No tuonhan saa VBA:lla tehtyä eli tietoja ei tarvi käyttää minkään ulkoisen ohjelman kautta.


    • paakki

      Laita hakukyselyn Ehdoksi:
      Not "la" And Not "su"

      Tämä poistaa päivämääräkentästä päivät "la" ja "su".

      Korvaat tietysti nuo "la" ja "su" sun omilla pvm-nimikkeilläsi.

      • paakki

        Mulla on Access-lomakkeessa tällainen pvm-juttu, joka on toteutettu Accessin Visual Basic-koodilla.

        Lomakkeessa on kolme Muokkausruutua:
        Muokkaus36 on muotoa Weekday(Date()).
        Muokkaus38 on pelkkä muokkausruutu ilman muotoja.
        Muokkaus40 on muotoa =Time()

        Koodi (Lomaketta aktivoitaessa):
        - - - - - - - - - -
        Private Sub Form_Activate()
        Me.Refresh

        If Muokkaus36 = 1 Then
        Muokkaus38 = "sunnuntai " & Date
        Else
        If Muokkaus36 = 2 Then
        Muokkaus38 = "maanantai " & Date
        Else
        If Muokkaus36 = 3 Then
        Muokkaus38 = "tiistai " & Date
        Else
        If Muokkaus36 = 4 Then
        Muokkaus38 = "keskiviikko " & Date
        Else
        If Muokkaus36 = 5 Then
        Muokkaus38 = "torstai " & Date
        Else
        If Muokkaus36 = 6 Then
        Muokkaus38 = "perjantai " & Date
        Else
        If Muokkaus36 = 7 Then
        Muokkaus38 = "lauantai " & Date

        End If
        End If
        End If
        End If
        End If
        End If
        End If

        End Sub
        - - - - - - - - - -
        Koodi (Muokkaus38:aa klikatessa):

        Private Sub Muokkaus38_DblClick(Cancel As Integer)

        Muokkaus40 = Time()
        MsgBox "Tänään on " & Muokkaus38 & " ja kello on " & Muokkaus40 & "."
        Me.Refresh

        End Sub
        - - - - - - - - - -
        Eli kun kun lomake aktivoituu (avautuu), saa tietyt muokkausruudut arvoiksi joko ajan tai viikonpäivän. Ja kun klikkaa Muokkaus38:aa, tulee sen arvoksi "Tänään on maanantai 23.8.2004 ja kello on 12:11:45."

        Aika pitkä ja ehkä sekavakin juttu, mutta tuo toimii täysin. Sun kohdalla voisit tehdä kyselyn, joka poistaa siis lauantait ja sunnuntait. Tällöin joudut kyllä käyttämään muokkausruutujen asemesta taulukoissa olevia kenttiä, joille annat muodoiksi joko pvm, klo tai teksti.


    • eakem

      ...alku- ja loppuajan välillä, ts. useita viikonloppuja? Jos ei, voisi tehdä union kyselyn, jossa aikajakson pilkkoo osiin, esim:

      SELECT nimi,alkuaika,loppuaika,alkuaika as uusialkuaika, datevalue(dateadd('d',1,alkuaika))-alkuaika as hyv_aika
      FROM Taulukko1
      where loppuaika-alkuaika>0
      UNION
      SELECT nimi,alkuaika,loppuaika,datevalue(alkuaika 1) as uusialkuaika,
      iif(dateadd('d',2,alkuaika)0 and format(alkuaika 1,'ddd') not in ('la','su')
      UNION
      SELECT nimi,alkuaika,loppuaika,datevalue(alkuaika 2) as uusialkuaika,
      iif(dateadd('d',3,alkuaika)0 and format(alkuaika 2,'ddd') not in ('la','su')
      UNION
      SELECT nimi,alkuaika,loppuaika,datevalue(alkuaika 3) as uusialkuaika,
      iif(dateadd('d',4,alkuaika)0 and format(alkuaika 3,'ddd') not in ('la','su')
      UNION
      SELECT nimi,alkuaika,loppuaika,alkuaika 4 as uusialkuaika,
      iif(dateadd('d',5,alkuaika)0 and format(alkuaika 4,'ddd') not in ('la','su')
      UNION
      SELECT nimi,alkuaika,loppuaika,alkuaika 5 as uusialkuaika,
      iif(dateadd('d',6,alkuaika)0 and format(alkuaika 5,'ddd') not in ('la','su')
      UNION SELECT nimi,alkuaika,loppuaika,alkuaika 6 as uusialkuaika,
      iif(dateadd('d',7,alkuaika)0 and format(alkuaika 6,'ddd') not in ('la','su');

      Tämän toiminta edellyttää, että alku- ja loppuajan välillä on max 7 vuorokautta. Jos aikajaksot on pitkiä, ei ole (ehkä) mitään järkeä tehdä näin. Tuon voi sitten vielä summata uudessa kyselyssä, jolloin saa yhden tietueen per tapahtuma, esim:
      SELECT kysely4.nimi, kysely4.alkuaika, kysely4.loppuaika, sum(kysely4.hyv_aika) AS arkipaiva_aika
      FROM kysely4
      GROUP BY kysely4.nimi, kysely4.alkuaika, kysely4.loppuaika;

      Tulos on näissä kyselyissä päivinä, kun päivämääriä vähennetään toisistaan.
      Kysely4 on tässä tapauksessa tuo eka union kysely.

      Myös switch- funktiolla voisi olla käyttöä tilantessasi.
      Datan luonne (lähinnä alku- ja loppuajan välisen jakson maksimipituus) ratkaisee sen, onko järkevää lähteä tekemään kyselyä, joka hanskaisi homman.

      • otso

        kiitos vaan vastauksesta mutta tässä tapauksessa on niin, että aikajakson pituus saattaa tietyissä tilanteissa lähennellä monia kuukausia joten tuo mainitsemasi ehdotus voi olla hieman hankala


    • Kunde

      Sub Tunnit(Alku As Date, Loppu As Date)
      Dim Tunnit As Double
      Dim x As Date
      x = Format(Alku, "dd/mm/yyyy")
      Tunnit = DateDiff("h", Alku, Loppu)
      While x 5 Then
      laskuri = laskuri 1
      x = x 1
      Else
      x = x 1
      End If
      Wend
      Tunnit = Tunnit - laskuri * 24
      MsgBox Tunnit
      End Sub

      Sub Koe()
      Tunnit TxtAlku.Text,txtLoppu.Text
      End Sub

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Työeläkeloisinta Suomen suurin talousongelma

      Työeläkeloisinta maksaa vuodessa lähes 40 miljardia euroa, josta reilut 28 miljardia on pois palkansaajien ostovoimasta.
      Maailman menoa
      281
      2926
    2. Veroaste on Suomessa viitisen prosenttiyksikköä liian matala

      Veropohjaa on rapautettu käytännössä koko kulunut vuosituhat, jonka vuoksi valtion menoja on jouduttu rahoittamaan velka
      Maailman menoa
      52
      2313
    3. Israel euroviisujen 2.

      Israel sai taas eniten yleisöääniä. Suomesta täydet 12 pistettä, poliittinen ”ammattiraati” antoi 0 pistettä. Hyvä Is
      Uskonnot ja uskomukset
      348
      1997
    4. Persujen puoluekokous 2026

      Missä ja Milloin pidetään ?
      Maailman menoa
      115
      1733
    5. Euroviisut ei enää niin musiikkikilpailu?

      Kappaleiden taso ei enää ole mikä sijoituksen ratkaisee.Eikö kukaan ihmettele että Israel pärjää lähes joka vuosi kisois
      Maailman menoa
      108
      1675
    6. Mun mielestäni on tosi loukkaavaa

      Nainen, että luulet palatan typeriä, sekavia ja ilkeitä viestejä mun kirjoittamiksi. Mä en ole katkera, epätoivoinen, ra
      Ikävä
      212
      1375
    7. Tiedän satavarmasti ettet tule koskaan

      Uskaltamaan mitään. Ei me tulla edes näkemään koskaan.
      Ikävä
      66
      1317
    8. Mikä se viehättävin

      Asia on kaivatussasi?
      Ikävä
      68
      1253
    9. Mikä kaivatussasi

      Viehättää ulkoisesti ja mikä sisäisesti?
      Ikävä
      58
      1232
    10. Rakas nainen ymmärsin

      Että minun pitää pitää kiinni sinusta. Haluan, että sä olet onnellinen. Olet mulle se oikea ja mä sulle. Rakastan Sua yl
      Ikävä
      77
      1181
    Aihe