Aina silloin tällöin sinun on otettava nykyinen päivämäärä ja laskettava jokin muu päivämäärä. Sinulla voi esimerkiksi olla sovellus, jonka on määritettävä, mikä päivämäärä on kuukauden ensimmäinen päivä, tai sinun on tiedettävä kuukauden viimeinen päivä. Nyt useimmat teistä luultavasti jo tietävät kuinka jakaa päivämäärä osiin (vuosi, kuukausi, päivä jne.) ja käyttää näitä paloja useiden funktioiden kanssa laskeaksesi päivämäärän, jota saatat tarvita. Tässä artikkelissa näytän, kuinka voit käyttää vain DATEADD- ja DATEDIFF-funktioita useiden eri päivämäärien laskemiseen, joita saatat joutua käyttämään sovelluksissasi.
Näiden esimerkkien ymmärtämiseksi tarkastellaan ensin DATEDIFF- ja DATEADD-funktioita. DATEDIFF-funktio laskee kahden päivämäärän välisen ajan, jolloin aikaosa perustuu aikaväliin, kuten tunteihin, päiviin, viikkoihin, kuukausiin, vuosiin jne. DATEADD-funktio laskee päivämäärän ottamalla aikavälin , ja lisäämällä se päivämäärään, jossa aikaväli on sama kuin DATEDIFF-funktion käyttämä aikaväli. Saat lisätietoja DATEDIFF- ja DATEADD-funktioista ja eri aikaväleistä lukemalla Microsoft Books Online -julkaisun.
DATEADD- ja DATEDIFF-funktioiden käyttäminen laskettuihin päivämääriin edellyttää, että ajattelet hieman eri tavalla siitä, mitä tarvitaan nykyisen päivämäärän muuntamiseen tarvitsemasi päivämääräksi. Sinun täytyy ajatella päivämäärävälejä. Esimerkiksi kuinka monta päivämääräväliä on nykyisestä päivämäärästä laskettavaan päivämäärään. Tai kuinka monta päivämääräväliä on päivästä toiseen päivämäärään, kuten "1900-01-01" ja niin edelleen. Päivämäärävälien tarkastelun ymmärtäminen auttaa sinua ymmärtämään paremmin erilaisia päivämääräesimerkkejäni.
Kuukauden ensimmäinen päivä
Ensimmäisessä esimerkissä haluan näyttää, kuinka kuukauden ensimmäinen päivä saadaan nykyisestä päivämäärästä. Muista nyt, että tämä esimerkki ja kaikki muut tämän artikkelin esimerkit käyttävät vain DATEADD- ja DATEDIFF-funktioita halutun päivämäärän laskemiseen. Jokainen esimerkki tekee tämän laskemalla päivämäärävälit nykyisestä päivämäärästä ja lisäämällä tai vähentämällä välit halutun lasketun päivämäärän saavuttamiseksi. Tässä on koodi kuukauden ensimmäisen päivän laskemiseen:
Valtusse datadd (mm, päivätty (mm, 0, getDate ()), 0)
Haluan tarkastella, kuinka tämä toimii, hajottamalla tämä lausunto. Sisäisin funktiokutsu “getdate()”, kuten useimmat teistä luultavasti jo tietävät, palauttaa nykyisen päivämäärän ja kellonajan. Nyt seuraava suoritettu funktiokutsu "DATEDIFF(mm,0,getdate())" laskee kuukausien lukumäärän nykyisen päivämäärän ja päivämäärän "1900-01-01 00:00:00.000" välillä. Muista, että päivämäärä- ja aikamuuttujat tallennetaan millisekuntien lukumääränä "1900-01-01 00:00:00.000"; Tästä syystä voit määrittää DATEDIFF-funktion ensimmäiseksi päivämäärä-aikalausekkeeksi "0". Nyt viimeinen funktiokutsu, DATEADD, lisää kuukausien määrän nykyisen päivämäärän ja '1900-01-01' väliin. Lisäämällä kuukausien määrän ennalta määritetyn päivämäärämme '1900-01-01' ja nykyisen päivämäärän väliin, voin saapua kuluvan kuun ensimmäiseen päivään. Lisäksi lasketun päivämäärän aikaosuus on "00:00:00.000".
Tässä esitettyä tekniikkaa, jolla lasketaan päivämääräväli nykyisen päivämäärän ja vuoden "1900-01-01" välillä ja lisätään sitten laskettu välin määrä "1900-01-01" tietyn päivämäärän laskemiseksi. laskea monia eri päivämääriä. Seuraavat neljä esimerkkiä käyttävät samaa tekniikkaa erilaisten päivämäärien luomiseen nykyisen päivämäärän perusteella.
Kuluvan viikon maanantai
Tässä käytän viikkoväliä (wk) laskeakseni, mikä päivämäärä on kuluvan viikon maanantai. Tässä esimerkissä oletetaan, että sunnuntai on viikon ensimmäinen päivä.
ValITSE DATEADD (VK, päivätty (VK, 0, getDate ()), 0)
Jos et halua sunnuntain olevan viikon ensimmäinen päivä, sinun on käytettävä toista menetelmää. Tässä on menetelmä, jonka David O Malley osoitti minulle ja joka käyttää DATEFIRST-asetusta asettaakseen viikon ensimmäisen päivän. Tässä esimerkissä maanantai asetetaan viikon ensimmäiseksi päiväksi.
Tämä Dutfrend 1
Valitse Datelisa (DD, 1 - päiväysja (dw, getDate ()), getDate ())
Mutta nyt, jos haluat muuttaa tätä esimerkkiä laskeaksesi erilaisen viikon ensimmäisen päivän, kuten "Viikon ensimmäinen tiistai", voit muuttaa yllä olevan set-komennon arvoksi "set DATEFIRST 2".
Vuoden ensimmäinen päivä
Nyt käytän vuosiväliä (yy) näyttämään vuoden ensimmäisen päivän.
Valtuse Datelisa (VV, päivätty (VV, 0, getDate ()), 0)
Neljänneksen ensimmäinen päivä
Jos sinun on laskettava kuluvan vuosineljänneksen ensimmäinen päivä, tässä on esimerkki siitä, kuinka se tehdään.
ValITSE DATEADD (QQ, päivätty (QQ, 0, getDate ()), 0)
Keskiyö nykypäivälle
Oletko koskaan joutunut lyhentämään getdate()-funktiosta palautetun datetime-arvon aikaosaa, jotta se heijastaa nykyistä päivämäärää keskiyöllä? Jos näin on, tässä on esimerkki, joka käyttää DATEADD- ja DATEDIFF-funktioita keskiyön aikaleiman saamiseksi.
Valtuse Datelisa (DD, päivätty (DD, 0, getDate ()), 0), 0)
Laajentuu DATEADD- ja DATEDIFF-laskentaan
Kuten näet, käyttämällä tätä yksinkertaista DATEADD- ja DATEDIFF-laskentaa voit keksiä monia erilaisia päivämääriä, jotka voivat olla arvokkaita.
Kaikki esimerkit ovat tähän mennessä laskeneet vain nykyisen päivämäärävälien lukumäärän nykyisen päivämäärän ja "1900-01-01" välillä ja lisänneet välien lukumäärän arvoon "1900-01-01" lasketun päivämäärän saamiseksi. Oletetaan, että muokkaat lisättävien välien määrää tai lisäsit muita DATEADD-funktioita, jotka käyttivät eri aikavälejä, tai vähennät aikavälejä välien lisäämisen sijaan; tekemällä nämä pienet muutokset voit keksiä monia erilaisia päivämääriä.
Tässä on neljä esimerkkiä, jotka lisäävät ylimääräisen DATEADD-funktion laskemaan viimeisten päivien päivämäärät sekä nykyiselle että aikaisemmille aikaväleille.
Edellisen kuun viimeinen päivä
Tässä on esimerkki, joka laskee edellisen kuukauden viimeisen päivän. Se tekee tämän vähentämällä 3 millisekuntia kuukauden esimerkin ensimmäisestä päivästä. Muista nyt, että SQL Serverin aikaosuus on vain 3 millisekuntia tarkka. Tästä syystä minun piti vähentää 3 millisekuntia saavuttaakseni haluamasi päivämäärän ja kellonajan.
valitse päivämäärälisää(ms,-3,PÄIVÄYSLISÄÄ(mm, PÄIVÄYSERI(mm,0,getdate()), 0))
Lasketun päivämäärän aikaosa sisältää ajan, joka kuvastaa päivän viimeistä millisekuntia ("23:59:59.997"), jonka SQL Server voi tallentaa.
Edellisen vuoden viimeinen päivä
Kuten edellisessä esimerkissä saadaksesi edellisen vuoden viimeisen päivämäärän, sinun on vähennettävä 3 millisekuntia vuoden ensimmäisestä päivästä.
valitse päivämäärälisäys(ms,-3,PÄIVÄYSLISÄÄ(vv, PÄIVÄYSDIFF(vv,0,getdate() ), 0))
Kuluvan kuukauden viimeinen päivä
Nyt saadakseni kuluvan kuukauden viimeisen päivän minun on muutettava hieman kyselyä, joka palauttaa edellisen kuukauden viimeisen päivän. Muokkauksen on lisättävä yksi DATEDIFF palauttamien intervallien määrään, kun verrataan nykyistä päivämäärää "1900-01-01". Lisäämällä 1 kuukauden lasken seuraavan kuukauden ensimmäisen päivän ja vähennän sitten 3 millisekuntia, jolloin pääsen kuluvan kuukauden viimeiseen päivään. Tässä on TSQL kuluvan kuukauden viimeisen päivän laskemiseksi.
valitse päivämäärälisää(ms,-3,PÄIVÄYSLISÄÄ(mm, PÄIVÄYSERI(m,0,getdate() )+1, 0))
Kuluvan vuoden viimeinen päivä
Sinun pitäisi saada tämä nyt käsiin. Tässä on koodi kuluvan vuoden viimeisen päivän laskemiseksi.
valitse päivämäärälisäys(ms,-3,PÄIVÄMÄÄRÄ(vv, PÄIVÄYSDIFF(vv,0,getdate() )+1, 0))
Kuukauden ensimmäinen maanantai
Ok, jään viimeiseen esimerkkiini. Tässä aion laskea kuluvan kuukauden ensimmäisen maanantain. Tässä on laskelman koodi.
Valitse DataDd (VK, päivätty (VK, 0,
päivämäärä lisää(dd,6-päivämäärä(päivä,saunapäivä()),getdate())
), 0)
Tässä esimerkissä otin koodin "Nykyisen viikon maanantai" ja muokkasin sitä hieman. Muokkauksen tarkoituksena oli muuttaa koodin "getdate()" -osa laskemaan 6thkuluvan kuukauden päivä. Käyttämällä 6thkuukauden päivä kaavan nykyisen päivämäärän sijaan sallii tämän laskelman palauttaa kuluvan kuukauden ensimmäisen maanantain.
Johtopäätös
Toivon, että nämä esimerkit ovat antaneet sinulle ideoita DATEADD- ja DATEDIFF-funktioiden käyttämisestä päivämäärien laskemiseen. Kun käytän tätä päivämäärävälin matemaattista menetelmää päivämäärien laskemiseen, olen huomannut, että on arvokasta, että minulla on käytettävissä kalenteri kahden eri päivämäärän välisten aikavälien visualisoimiseksi. Muista, että tämä on vain yksi tapa suorittaa nämä päivämäärälaskelmat. Muista, että on todennäköisesti useita muita menetelmiä samojen laskelmien suorittamiseen. Jos tiedät toisen tavan, hienoa, mutta jos et, toivon, että nämä esimerkit ovat antaneet sinulle ideoita DATEADD:n ja DATEDIFF:n avulla laskeaksesi päivämäärät, joita sovelluksesi saattavat tarvita.
» Katso kaikki kolumnisti Gregory A. Larsenin artikkelit