SQL Server’da Doğum Günü Yaklaşan Personelleri Haftalık Olarak Göstermek
Herkese merhaba,
Bu yazıda SQL Server’da doğum günü yaklaşan personelleri haftalık olarak göstermek 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 SQL sorgusu sizin için güzel bir sorgu olabilir.
Bu sorgu çalışma günlerinde doğum günü olan kişileri kapsayan bir SQL sorgusudur. Böyle bir sorguyu 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.
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.
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 listeleyelim.
DECLARE @CalismaGunu DATE; SET @CalismaGunu = '2020-06-15'; --Buraya istersen tarih verebilirsin. İstersen de getdate() yazabilirsin. SET LANGUAGE Turkish; SELECT *, DATENAME(WEEKDAY, p.[Yaklaşan Doğum Günü Tarihleri]) AS Gün, IIF(p.[Yaklaşan Doğum Günü Tarihleri] = @CalismaGunu, '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, @CalismaGunu) - DATEPART(YEAR, DogumTarihi), DogumTarihi ) FROM Personeller s --Tablo adını burdan değiştirebilirsin ) p WHERE ( p.[Yaklaşan Doğum Günü Tarihleri] >= DATEADD( wk, 0, DATEADD( DAY, 1 - DATEPART(WEEKDAY, @CalismaGunu), DATEDIFF(dd, 0, @CalismaGunu) ) ) AND p.[Yaklaşan Doğum Günü Tarihleri] <= DATEADD( wk, 1, DATEADD( DAY, 0 - DATEPART(WEEKDAY, @CalismaGunu), DATEDIFF(dd, 0, @CalismaGunu) ) ) - 2 ) AND DATENAME(WEEKDAY, p.DogumTarihi) NOT IN ( 'Saturday', 'Sunday' ) AND p.[Yaklaşan Doğum Günü Tarihleri] >= @CalismaGunu ORDER BY p.[Yaklaşan Doğum Günü Tarihleri] ASC;
Kodu ç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