Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --
- Create Procedure Fin_Luna_
- @DateTo datetime
- as
- begin
- update EMPLOYEE_INSURANCE set DATE_TO=EOMONTH(@DateTo,0)
- -- update EMPLOYEE_INSURANCE set DATE_TO=DATEADD(dd, -1, DATEADD(mm, DATEDIFF(mm, 0, @DateTo) + 1, 0))
- WHERE @DateTo>DATE_FROM
- end
- go
- exec Fin_Luna_ '2018-10-01'
- --
- -- eomonth - returneaza ultima zi din luna (data)
- -- datediff - primeste date 2 , date 1 si face date2 - date1 = x zile distanta
- -- prima zi a lunii urmatoare - data curenta
- SELECT DATEADD(dd, -1, DATEADD(mm, DATEDIFF(mm, 0, '2018-05-21') + 1, 0)) -- avem dateAdd in dateAdd. al2lea dateAdd iti da prima zi din urmatoarea luna
- -- al 2lea dateAdd scade 1 zi din data obtinuta mai sus si asa obtinem ultima zi din luna curenta
- -- se adauga 1437 + 1 luni la anul 0 adica la 01-01-1900 si asa obtii 01-11-2019 !!!!!
- -- prima zi din urmatoarea luna DATEADD(interval, number, date) ... anul 1900 simbolizeaza anul 0 in sql
- -- interval = mm , dd, yyyy
- -- number = poate fi cu + sau - , adaug sau scad luni, zile sau ani
- -- date = data pe care o modifica tinand cont de interval si number
- SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0) -- adaugam 1 luna ca sa ne dea urmatoarea luna fata de data curenta
- -- unde DATEDIFF(mm, 0, GETDATE()) o sa calculeze numarul de luni distanta din 15-10-2019 si 01-01-1900 adica 1437
- select DATEDIFF(mm, 0, GETDATE())
- ----
- -- ca sa obtinem prima zi din luna urmatoare, ei s-au gandit sa adauge la 01-01-1900 ( care este anul 0 ) numarul de luni pana la prima zi din luna urmatoare
- select DATEADD(month, DATEDIFF(mm, 0, GETDATE()) + 1, 0)
- --1 aflam cate luni au trecut din 01.01.1900 pana azi datediff(mm, 0, GETDATE()) -> 1437
- --2 aflam prima zi din luna urmatoare DATEADD(mm, 0, datediff(mm, 0, GETDATE()) + 1)
- --3 scadem 1 zi ca sa aflam ultima zi din luna precedenta dateadd(dd, -1, DATEADD(mm, 0, datediff(mm, 0, GETDATE()) + 1))
- -- TEMA
- -- folosind DATEADD si DATEDIFF
- -- ex 1 adauga 4 luni la data de 05-05-2020
- -- ex 2 scade 3 zile din data curenta
- -- ex 3 adauga 1 an la ziua curenta
- -- ex4 afla cate luni au trecut din 1900 (fara sa treci '01-01-1900') pana in ziua de azi
- -- ex5 adauga la data de 01-01-1900 rezultatul de la exercitiul 4+1
- -- ex6 scade 1 zi din data obtinuta la ex5. ce obtii? eomonth!
- --ex1
- select DATEADD(mm, 4, '05-05-2020')
- --ex2
- select dateadd(dd, -3, getdate())
- --ex3
- select dateadd (yyyy, 1 , getdate())
- --ex4
- select datediff(mm, 0, getdate())
- --ex5
- select dateadd(mm, datediff(mm, 0, getdate()) + 1, 0 )
- --ex6
- select dateadd(dd, -1, dateadd(mm, datediff(mm, 0, getdate()) + 1, 0 ))
- -- echivalent cu eomonth
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement