Herkese merhaba,
Bu yazıda SQL Server’da doğum günü yaklaşan personelleri haftalık olarak gösteren dinamik prosedür hakkında bilgi vereceğim.
Eğer büyük ve kurumsal bir firmada çalışıyorsanız ve personellerine önem veren bir firma ise bu prosedür sizin için güzel olabilir.
Bu prosedür çalışma günlerinde doğum günü olan kişileri kapsayan bir prosedürdür. Böyle bir prosedürü daha önce internette görmedim. Alanında tektir.
Ben işlem için bir tablo oluşturdum. Bu tablo üzerinden işlemlerimi yapacağım. Siz dilerseniz bu tablo üzerinden dilerseniz de kendi tablonuz üzerinden işlemleri yapabilirsiniz.
İlk önce tablomuzu oluşturalım.
1 2 3 4 5 |
CREATE TABLE [dbo].[Personeller]( [ID] [int] IDENTITY(1,1) NOT NULL, [Ad] [nvarchar](50) NULL, [Soyad] [nvarchar](50) NULL, [DogumTarihi] [date] NULL) |
Şimdi içerisine veri ekleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
INSERT INTO Personeller (Ad, Soyad, DogumTarihi) VALUES ( N'Fredrick', N'Ramirez', N'1968-02-27T00:00:00' ), ( N'Mario', N'Callahan', N'1978-06-30T00:00:00' ), ( N'Clyde', N'Tate', N'1971-10-02T00:00:00' ), ( N'Sheryl', N'Beck', N'1981-11-20T00:00:00' ), ( N'Meredith', N'Carson', N'1964-08-01T00:00:00' ), ( N'Cecilia', N'Bartlett', N'1985-04-11T00:00:00' ), ( N'Elena', N'Brown', N'1970-03-26T00:00:00' ), ( N'Derek', N'Mcgrath', N'1962-05-03T00:00:00' ), ( N'Shanda', N'Bird', N'1979-07-26T00:00:00' ), ( N'Cassandra', N'Wright', N'1984-05-02T00:00:00' ), ( N'Katina', N'Davis', N'1953-04-15T00:00:00' ), ( N'Lawrence', N'Rogers', N'1971-12-04T00:00:00' ), ( N'Angelia', N'Miller', N'1961-10-31T00:00:00' ), ( N'Jack', N'Wolfe', N'1964-12-25T00:00:00' ), ( N'Penny', N'Pace', N'1965-08-07T00:00:00' ), ( N'Kim', N'Glover', N'1960-08-16T00:00:00' ), ( N'Marcie', N'Johns', N'1967-08-13T00:00:00' ), ( N'Shirley', N'Harding', N'1977-05-03T00:00:00' ), ( N'Penny', N'Woods', N'1979-07-29T00:00:00' ), ( N'Daniel', N'Roberts', N'1978-03-05T00:00:00' ), ( N'Lydia', N'May', N'1985-06-25T00:00:00' ), ( N'Marcus', N'Gould', N'1953-09-05T00:00:00' ), ( N'Ivan', N'Greer', N'1968-10-07T00:00:00' ), ( N'Charles', N'Dominguez', N'1973-08-15T00:00:00' ), ( N'Ramona', N'Edwards', N'1979-11-05T00:00:00' ), ( N'Susana', N'Bradley', N'1975-03-27T00:00:00' ), ( N'Daryl', N'Pitts', N'1970-12-18T00:00:00' ), ( N'Autumn', N'Pham', N'1968-07-21T00:00:00' ), ( N'Cassandra', N'Hendrix', N'1978-02-24T00:00:00' ), ( N'Floyd', N'Strickland', N'1956-02-04T00:00:00' ), ( N'Calvin', N'Mac Donald', N'1962-04-09T00:00:00' ), ( N'Eduardo', N'Greer', N'1954-07-08T00:00:00' ), ( N'Dean', N'Castaneda', N'1977-04-09T00:00:00' ), ( N'Sherrie', NULL, N'1983-07-21T00:00:00' ), ( N'Lisa', N'Norton', N'1984-08-12T00:00:00' ), ( N'Jackie', N'Li', N'1956-11-10T00:00:00' ), ( N'Cara', N'Potter', N'1965-02-21T00:00:00' ), ( N'Harvey', N'Curtis', N'1974-02-11T00:00:00' ), ( N'Melisa', N'Herring', N'1976-11-07T00:00:00' ), ( N'Benjamin', N'Levine', N'1980-08-06T00:00:00' ), ( N'Evan', N'Mosley', N'1980-05-12T00:00:00' ), ( N'Susan', N'Frank', N'1975-09-28T00:00:00' ), ( N'Gina', N'Patterson', N'1969-07-30T00:00:00' ), ( N'Beth', N'Dougherty', N'1968-05-29T00:00:00' ), ( N'Ericka', N'Barnes', N'1970-10-18T00:00:00' ), ( N'Latoya', N'Sellers', N'1959-05-16T00:00:00' ), ( N'Staci', N'Morgan', N'1984-12-02T00:00:00' ), ( N'Ross', N'Stark', N'1954-06-07T00:00:00' ), ( N'Alisha', N'Barker', N'1974-05-15T00:00:00' ), ( N'Kelli', N'Kim', N'1985-08-03T00:00:00' ), ( N'Allan', N'Shelton', N'1984-12-12T00:00:00' ), ( N'Sonja', N'Lutz', N'1979-05-12T00:00:00' ), ( N'Alvin', N'Fritz', N'1961-02-08T00:00:00' ), ( N'Everett', N'Gomez', N'1965-06-29T00:00:00' ), ( N'Rachelle', N'Watkins', N'1983-02-06T00:00:00' ), ( N'Clay', N'Estrada', N'1960-12-30T00:00:00' ), ( N'Gregg', N'Johnston', N'1960-10-31T00:00:00' ), ( N'Tim', N'Reed', N'1975-09-09T00:00:00' ), ( N'Glenn', N'Jordan', N'1959-07-12T00:00:00' ), ( N'Liza', N'Gilbert', N'1984-08-07T00:00:00' ), ( N'Franklin', N'Horton', N'1968-04-27T00:00:00' ), ( N'Carla', N'Ortiz', N'1958-03-15T00:00:00' ), ( N'Jessie', N'Shaffer', N'1978-07-21T00:00:00' ), ( N'Jimmie', N'Smith', N'1973-12-07T00:00:00' ), ( N'Jordan', N'Flynn', N'1973-02-15T00:00:00' ), ( N'Harry', N'Thornton', N'1966-06-17T00:00:00' ), ( N'Dwayne', N'Waters', N'1983-02-08T00:00:00' ), ( N'Hannah', N'Norman', N'1955-07-27T00:00:00' ), ( N'Ron', N'Cervantes', N'1982-12-22T00:00:00' ), ( N'Kristi', N'Dunlap', N'1964-11-05T00:00:00' ), ( N'Erich', N'Rojas', N'1969-05-13T00:00:00' ), ( N'Gene', N'Pierce', N'1979-01-06T00:00:00' ), ( N'Rogelio', N'David', N'1956-05-03T00:00:00' ), ( N'Heather', N'Schmitt', N'1980-01-22T00:00:00' ), ( N'Olga', N'Gallagher', N'1977-02-24T00:00:00' ), ( N'Kristina', NULL, N'1983-04-18T00:00:00' ), ( N'Angelique', N'Sweeney', N'1983-04-11T00:00:00' ), ( N'Alex', N'Fox', N'1965-06-28T00:00:00' ), ( N'Chester', N'Davis', N'1985-02-25T00:00:00' ), ( N'Morgan', N'Frank', N'1961-04-07T00:00:00' ), ( N'Janine', N'Anthony', N'1982-04-22T00:00:00' ), ( N'Catherine', N'Bright', N'1967-07-16T00:00:00' ), ( N'Kellie', N'Schroeder', N'1956-07-12T00:00:00' ), ( N'Enrique', N'Shelton', N'1954-02-01T00:00:00' ), ( N'Regina', N'Gross', N'1961-04-11T00:00:00' ), ( N'Rachael', N'Grimes', N'1974-02-03T00:00:00' ), ( N'Trent', N'Norman', N'1966-06-19T00:00:00' ), ( N'Dianna', N'Stein', N'1978-12-31T00:00:00' ), ( N'Joy', N'Bauer', N'1975-09-23T00:00:00' ), ( N'Jeanne', N'Barber', N'1963-10-12T00:00:00' ), ( N'Jamal', N'Pierce', N'1960-01-19T00:00:00' ), ( N'Lara', N'Byrd', N'1974-01-06T00:00:00' ), ( N'Monica', N'Bush', N'1978-08-28T00:00:00' ), ( N'Shane', N'Herrera', N'1953-07-06T00:00:00' ), ( N'Quentin', N'York', N'1984-10-04T00:00:00' ), ( N'Devon', N'Abbott', N'1985-02-18T00:00:00' ), ( N'Jesse', N'Chase', N'1975-08-22T00:00:00' ), ( N'April', N'Mercer', N'1984-03-08T00:00:00' ), ( N'Derick', N'Simmons', N'1963-04-25T00:00:00' ), ( N'Rachel', N'Graves', N'1953-09-06T00:00:00' ) |
Şimdi belirtilen tarihteki haftayı baz almış doğum günü olan kişileri prosedürmüzle listeleyelim.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
CREATE PROC DogumGunuGetirme @TabloAdi NVARCHAR(30), @AlanAdi NVARCHAR(30), @TarihSecimi NVARCHAR(30) AS BEGIN DECLARE @SQLCumlesi NVARCHAR(1000); SET LANGUAGE Turkish; SET @SQLCumlesi = N' SELECT *,DATENAME(WEEKDAY,p.[Yaklaşan Doğum Günü Tarihleri]) AS Gün, IIF(p.[Yaklaşan Doğum Günü Tarihleri]=''' + CAST(@TarihSecimi AS VARCHAR(20)) + N''',''Bugün Doğum Günü'',''Bu Hafta '' + DATENAME(WEEKDAY,p.[Yaklaşan Doğum Günü Tarihleri]) ) AS Bilgi FROM ( SELECT *, [Yaklaşan Doğum Günü Tarihleri] = DATEADD(YEAR, DATEPART(YEAR, ''' + CAST(@TarihSecimi AS VARCHAR(20)) + N''') - DATEPART(YEAR, ' + @AlanAdi + N'), ' + @AlanAdi + N') FROM ' + @TabloAdi + N' s ) p WHERE (p.[Yaklaşan Doğum Günü Tarihleri]>= DATEADD(wk, 0, DATEADD(DAY, 1-DATEPART(WEEKDAY, ''' + CAST(@TarihSecimi AS VARCHAR(20)) + N'''), DATEDIFF(dd, 0, ''' + @TarihSecimi + N'''))) AND p.[Yaklaşan Doğum Günü Tarihleri]<= DATEADD(wk, 1, DATEADD(DAY, 0-DATEPART(WEEKDAY,''' + CAST(@TarihSecimi AS VARCHAR(20)) + N'''), DATEDIFF(dd, 0, ''' + @TarihSecimi + N''')))-2) AND DATENAME(WEEKDAY,p.' + @AlanAdi + N') NOT IN (''Saturday'', ''Sunday'') AND P.[Yaklaşan Doğum Günü Tarihleri]>=''' + CAST(@TarihSecimi AS VARCHAR(20)) + N''' ORDER BY P.[Yaklaşan Doğum Günü Tarihleri] asc '; EXEC sp_executesql @SQLCumlesi; END; --Prosedürün Çalıştırılması EXEC DogumGunuGetirme @TabloAdi = N'Personeller', @AlanAdi = N'DogumTarihi', @TarihSecimi = N'20200615'; |
Prosedürü çalıştırınca aşağıdaki sonucu göreceksiniz.
Görüldüğü üzere belirtilen güne ait haftada iki kişinin doğum günü varmış.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar
