問題概述:獲得所有出生日期在兩個日期之間的雇員。
我有一個帶有姓名和出生日期的Employee表
| Emp | DOB | 。|
|---|---|---|
| ABC | 1991-03-10 00:00:00.000 | 。|
| XYZ | XYZ | 1992-12-1 00:00:00.000 |
| AJM | AJM | 1992-08-20 00:00:00.000 |
| 1992-08-20 00:00:00.000 | ||
| RNM | RNM | 1991-07-10 00:00:00.000 |
我正在尋找一個查詢,以獲得所有出生日期在從和到日期之間的員工,而不檢查年份。
- 起始日期 - 1 Jan 2020
- 到日期 - 2020年3月31日 。
它應該回傳1條記錄
。| Emp | DOB | 。
|---|---|
| ABC | 1991-03-10 00:00:00.000 | 。
- 開始日期 - 2020年3月1日 截止日期 - 2021年1月15日。
結果應該是:
。| Emp | DOB | 。|
|---|---|---|
| ABC | 1991-03-10 00:00:00.000 | 。|
| XYZ | XYZ | 1992-12-1 00:00:00.000 |
| AJM | AJM | 1992-08-20 00:00:00.000 |
| 1992-08-20 00:00:00.000 | ||
| RNM | RNM | 1991-07-10 00:00:00.000 |
uj5u.com熱心網友回復:
我想我有辦法找到所需范圍內的生日,同時考慮到年份邊界:
DECLARE @employee TABLE(
Emp VARCHAR(100)。
DOB datetime
)
INSERT INTO @employee SELECT 'ABC', '1991-03-10'
INSERT INTO @employee SELECT'XYZ', '1992-12-01'
INSERT INTO @employee SELECT'AJM', '1992-08-20'
INSERT INTO @employee SELECT'RNM', '1991-07-10'
DECLARE @StartDate datetime = '2020-12-01'。
DECLARE @EndtDate datetime = '2020-12-01';
select *
from @employee
where
((Floor(DateDiff(dd,dob,@EndtDate) / 365。 25))-(Floor(DateDiff(dd,dob,@StartDate) / 365。 25) = 1)
OR (MONTH(@StartDate)=MONTH(DOB)AND DAY(@StartDate)=DAY(DOB)
uj5u.com熱心網友回復:
對于每個人來說,在未來:
你可以很容易地選擇你想要的日期,只要設定@StartDate和@EndtDate
代碼看起來像 :
DECLARE @employee TABLE(
Emp VARCHAR(100)。
DOB datetime
)
INSERT INTO @employee SELECT 'ABC', '1991-03-01'
INSERT INTO @employee SELECT'XYZ', '1992-12-01'
INSERT INTO @employee SELECT'AJM', '1992-08-20'
INSERT INTO @employee SELECT'RNM', '1991-07-10'
DECLARE @StartDate datetime = '2020-03-01'。
DECLARE @EndtDate datetime = '2021-01-15';
DECLARE @employeeResultFinal TABLE(
Emp VARCHAR(100)。
DOB datetime
)
IF(DAY(@StartDate) =DAY(@EndtDate)
begin
IF(MONTH(@StartDate) =MONTH(@EndtDate)
begin
IF(YEAR(@StartDate) ! =YEAR(@EndtDate)
begin(span class="hljs-variable">)
select * from @employee
得到Result。
end
end; end
end end
IF(@StartDate) = @EndtDate
begin
select * from @employee
where MONTH(DOB) = MONTH(@EndtDate)
and DAY(DOB) = DAY(@EndtDate)
得到Result。
結束。
IF(YEAR(@StartDate) ! = YEAR(@EndtDate) )
begin(span class="hljs-variable">)
--當有超過1年的差異時。
SELECT *
FROM @employee
WHERE (Month(DOB) > = MONTH(@StartDate) AND Day(DOB) > = DAY(@StartDate)
OR (Month(DOB) < = MONTH(@EndtDate) AND Day(DOB) <。 = DAY(@EndtDate)
得到Result。
結束。
IF(YEAR(@StartDate) = YEAR(@EndtDate) )
begin(span class="hljs-variable">)
--如果只是同年,它就選擇。
INSERT INTO @employeeResultFinal
SELECT*
FROM @employee
WHERE MONTH(DOB) >=MONTH(@StartDate))
and MONTH(DOB) <= MONTH(@EndtDate)
end(span class="hljs-variable">)
--如果DOB和EndDate中的月份相同而DOB中的日期較高,則洗掉記錄。
delete from @employeeResultFinal
where
MONTH(DOB) = MONTH(@EndtDate)
and DAY(DOB) >/span> DAY(@EndtDate)
select * from @employeeResultFinal
Result。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314537.html
標籤:
上一篇:去掉字符左邊和右邊的詞
