Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 2.68 KB | None | 0 0
  1. --
  2. Create Procedure Fin_Luna_
  3. @DateTo datetime
  4. as
  5. begin
  6. update EMPLOYEE_INSURANCE set DATE_TO=EOMONTH(@DateTo,0)
  7. -- update EMPLOYEE_INSURANCE set DATE_TO=DATEADD(dd,  -1, DATEADD(mm, DATEDIFF(mm, 0, @DateTo) + 1, 0))
  8.  WHERE @DateTo>DATE_FROM
  9. end
  10. go
  11.  
  12. exec  Fin_Luna_ '2018-10-01'
  13. --
  14.  
  15. -- eomonth - returneaza ultima zi din luna (data)
  16.  
  17.  
  18. -- datediff - primeste  date 2 , date 1 si face date2 - date1 = x zile distanta
  19. --  prima zi a lunii urmatoare   -  data curenta
  20. 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
  21.                                                                             -- al 2lea dateAdd scade 1 zi din data obtinuta mai sus si asa obtinem ultima zi din luna curenta
  22. -- se adauga 1437 + 1 luni la anul 0 adica la 01-01-1900 si asa obtii 01-11-2019 !!!!!
  23.  
  24. -- prima zi din urmatoarea luna DATEADD(interval, number, date) ... anul 1900 simbolizeaza anul 0 in sql
  25. --                                      interval = mm , dd, yyyy
  26. --                                      number = poate fi cu + sau -   , adaug sau scad luni, zile sau ani
  27. --                                      date = data pe care o modifica tinand cont de interval si number
  28.  
  29. SELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0)  -- adaugam 1 luna ca sa ne dea urmatoarea luna fata de data curenta
  30.  
  31. -- unde DATEDIFF(mm, 0, GETDATE()) o sa calculeze numarul de luni distanta din 15-10-2019 si 01-01-1900 adica 1437
  32. select DATEDIFF(mm, 0, GETDATE())
  33. ----
  34.  
  35. -- 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
  36. select DATEADD(month, DATEDIFF(mm, 0, GETDATE()) + 1, 0)
  37.  
  38.  
  39. --1 aflam cate luni au trecut din 01.01.1900 pana azi   datediff(mm, 0, GETDATE()) -> 1437
  40. --2 aflam prima zi din luna urmatoare                   DATEADD(mm, 0, datediff(mm, 0, GETDATE()) + 1)
  41. --3 scadem 1 zi ca sa aflam ultima zi din luna precedenta dateadd(dd, -1,   DATEADD(mm, 0, datediff(mm, 0, GETDATE()) + 1))
  42.  
  43.  
  44. -- TEMA
  45. -- folosind DATEADD si DATEDIFF
  46.  
  47. -- ex 1  adauga 4 luni la data de 05-05-2020
  48. -- ex 2  scade 3 zile din data curenta
  49. -- ex 3  adauga 1 an la ziua curenta
  50. -- ex4   afla cate luni au trecut din 1900 (fara sa treci '01-01-1900') pana in ziua de azi
  51. -- ex5  adauga la data de 01-01-1900  rezultatul de la exercitiul 4+1
  52. -- ex6  scade 1 zi din data obtinuta la ex5. ce obtii?  eomonth!
  53. --ex1
  54. select DATEADD(mm, 4, '05-05-2020')
  55. --ex2
  56. select dateadd(dd, -3, getdate())
  57. --ex3
  58. select dateadd (yyyy, 1 , getdate())
  59. --ex4
  60. select datediff(mm, 0, getdate())
  61. --ex5
  62. select dateadd(mm, datediff(mm, 0, getdate()) + 1, 0 )
  63. --ex6
  64. select dateadd(dd, -1, dateadd(mm, datediff(mm, 0, getdate()) + 1, 0 ))
  65. -- echivalent cu eomonth
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement