sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Välj Kommande födelsedagar

Obs:Jag har redigerat detta för att fixa vad jag tror var ett betydande fel. Den aktuella versionen fungerar för mig.

Detta bör fungera efter att du ändrat fält- och tabellnamnen så att de motsvarar din databas.

SELECT 
  BRTHDATE AS BIRTHDAY
 ,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25) AS AGE_NOW
 ,FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25) AS AGE_ONE_WEEK_FROM_NOW
FROM 
  "Database name".dbo.EMPLOYEES EMP
WHERE 1 = (FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()+7) / 365.25))
          -
          (FLOOR(DATEDIFF(dd,EMP.BRTHDATE,GETDATE()) / 365.25))

I grund och botten får den antalet dagar från deras födelsedag till nu, och dividerar det med 365 (för att undvika avrundning av problem som dyker upp när du konverterar direkt till år).

Sedan får den antalet dagar från deras födelsedag till en vecka från och med nu, och dividerar det med 365 för att få deras ålder om en vecka.

Om deras födelsedag är inom en vecka blir skillnaden mellan dessa två värden 1. Så det returnerar alla dessa poster.



  1. SCD typ 1

  2. WHERE IN (uppsättning av ID)

  3. DB-kontroll närmar sig sin död

  4. Obesvarade frågor om MS SQL Server-säkerhet och åtkomstkontroll