Lưu ý:Tôi đã chỉnh sửa phần này để sửa lỗi mà tôi tin rằng đó là một lỗi nghiêm trọng. Phiên bản hiện đã đăng phù hợp với tôi.
Điều này sẽ hoạt động sau khi bạn sửa đổi trường và tên bảng để tương ứng với cơ sở dữ liệu của bạn.
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))
Về cơ bản, nó lấy # ngày từ sinh nhật của họ đến bây giờ và chia số đó cho 365 (để tránh các vấn đề làm tròn số phát sinh khi bạn chuyển đổi trực tiếp thành năm).
Sau đó, nó lấy # ngày từ sinh nhật của họ đến một tuần kể từ bây giờ và chia số đó cho 365 để có tuổi của họ một tuần kể từ bây giờ.
Nếu ngày sinh của họ diễn ra trong vòng một tuần, thì sự khác biệt giữa hai giá trị đó sẽ là 1. Vì vậy, nó trả về tất cả các bản ghi đó.