[SQL] SQL 선택 다가오는 생일
SQLSQL 선택 다가오는 생일
나는 곧입니다 생일이 직원을 선택하는 저장 프로 시저를 작성하는 것을 시도하고있다.
종업원 SELECT * FROM WHERE 생일> @Today 생일 <@Today + @NumDays
출생 연도 내 생일 '과 '09 -25-2008''09 -18-2008 사이에 떨어지지 않을 것 ''09 -18-1983했다 그렇다면, 생일의 일부이기 때문에이하지 않습니다 작동합니다.
날짜 필드의 연도 부분과 바로 비교 월 / 일을 무시하는 방법이 있나요?
그것은 아마도 새로운 년에 걸쳐 있도록이, 다가오는 생일의 경고를 관리자에게 매주 월요일 아침 실행됩니다.
여기에 내가 만들어 결국 그 작업 솔루션 덕분에 Kogus이다.
SELECT * FROM Employees
WHERE Cast(DATEDIFF(dd, birthdt, getDate()) / 365.25 as int)
- Cast(DATEDIFF(dd, birthdt, futureDate) / 365.25 as int)
<> 0
해결법
-
==============================
1.참고 : 나는 중요한 버그이었다 믿는 것을 해결하기 위해이 편집했습니다. 현재 게시 버전은 나를 위해 작동합니다.
참고 : 나는 중요한 버그이었다 믿는 것을 해결하기 위해이 편집했습니다. 현재 게시 버전은 나를 위해 작동합니다.
당신이 당신의 데이터베이스에 해당하는 필드와 테이블 이름을 수정 한 후에이 작업을해야합니다.
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))
기본적으로, 지금은 자신의 생일에서 일의 #을 가져오고 분할이 365에 의해 (당신이 년에 직접 변환 할 때 올 피하기 반올림 문제).
그런 다음 365에 의해 지금부터 일주일에 자신의 나이를 얻을 수 있는지 지금부터 일주일에 생일에서 일의 #을 가져오고 분할.
자신의 생일이 일주일 내에있는 경우는 그 모든 레코드를 반환 그래서 다음 두 값의 차이는 1이됩니다.
-
==============================
2.경우에는 누군가가 여전히 MySQL을 (약간 다른 명령), 여기에 쿼리의 솔루션을 찾고있다 :
경우에는 누군가가 여전히 MySQL을 (약간 다른 명령), 여기에 쿼리의 솔루션을 찾고있다 :
SELECT name,birthday, FLOOR(DATEDIFF(DATE(NOW()),birthday) / 365.25) AS age_now, FLOOR(DATEDIFF(DATE_ADD(DATE(NOW()),INTERVAL 30 DAY),birthday) / 365.25) AS age_future FROM user WHERE 1 = (FLOOR(DATEDIFF(DATE_ADD(DATE(NOW()),INTERVAL 30 DAY),birthday) / 365.25)) - (FLOOR(DATEDIFF(DATE(NOW()),birthday) / 365.25)) ORDER BY MONTH(birthday),DAY(birthday)
-
==============================
3.DATEDIFF 및 DATEADD의 최고 사용. 아니 반올림, 아니 가까운 것 월 버그, 아무것도하지만, 날짜 함수없이 29 일
DATEDIFF 및 DATEADD의 최고 사용. 아니 반올림, 아니 가까운 것 월 버그, 아무것도하지만, 날짜 함수없이 29 일
@Gustavo 카르도소, 사람의 나이에 대한 새로운 정의 덕분에
-
==============================
4.@strelc의 접근 방식을 좋아하지만, 자신의 SQL은 조금 떨어져 있었다. 다음은 잘 작동하고 사용하기 간단 업데이트 버전입니다 :
@strelc의 접근 방식을 좋아하지만, 자신의 SQL은 조금 떨어져 있었다. 다음은 잘 작동하고 사용하기 간단 업데이트 버전입니다 :
SELECT * FROM User WHERE (DATEDIFF(dd, getdate(), DATEADD(yyyy, DATEDIFF(yyyy, birthdate, getdate()) + 1, birthdate)) + 1) % 366 <= <number of days>
편집 2,017분의 10 : 끝으로 하루를 추가
-
==============================
5.당신은 DAYOFYEAR 기능을 사용하지만 12 월에 월 생일 찾고 싶을 때주의 될 수있다. 나는 당신이 긴 기간을 당신이 새해에 걸쳐하지 않습니다 찾고있는대로 잘 될 것 같아요.
당신은 DAYOFYEAR 기능을 사용하지만 12 월에 월 생일 찾고 싶을 때주의 될 수있다. 나는 당신이 긴 기간을 당신이 새해에 걸쳐하지 않습니다 찾고있는대로 잘 될 것 같아요.
-
==============================
6.죄송 년을 중화하기위한 요구 사항을 보지 못했다.
죄송 년을 중화하기위한 요구 사항을 보지 못했다.
select * from Employees where DATEADD (year, DatePart(year, getdate()) - DatePart(year, Birthday), Birthday) between convert(datetime, getdate(), 101) and convert(datetime, DateAdd(day, 5, getdate()), 101)
이 작업을해야합니다.
-
==============================
7.나는 이것에 대한 해결책을 발견했다. 이것은 누군가의 소중한 시간을 절약 할 수 있습니다.
나는 이것에 대한 해결책을 발견했다. 이것은 누군가의 소중한 시간을 절약 할 수 있습니다.
select EmployeeID,DOB,dates.date from emp_tb_eob_employeepersonal cross join dbo.GetDays(Getdate(),Getdate()+7) as dates where weekofmonthnumber>0 and month(dates.date)=month(DOB) and day(dates.date)=day(DOB) GO /****** Object: UserDefinedFunction [dbo].[GetDays] Script Date: 11/30/2011 13:19:17 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO --SELECT [dbo].[GetDays] ('02/01/2011','02/28/2011') ALTER FUNCTION [dbo].[GetDays](@startDate datetime, @endDate datetime) RETURNS @retValue TABLE (Days int ,Date datetime, WeekOfMonthNumber int, WeekOfMonthDescription varchar(10), DayName varchar(10)) AS BEGIN DECLARE @nextDay int DECLARE @nextDate datetime DECLARE @WeekOfMonthNum int DECLARE @WeekOfMonthDes varchar(10) DECLARE @DayName varchar(10) SELECT @nextDate = @startDate, @WeekOfMonthNum = DATEDIFF(week, DATEADD(MONTH, DATEDIFF(MONTH,0,@startDate),0),@startDate) + 1, @WeekOfMonthDes = CASE @WeekOfMonthNum WHEN '1' THEN 'First' WHEN '2' THEN 'Second' WHEN '3' THEN 'Third' WHEN '4' THEN 'Fourth' WHEN '5' THEN 'Fifth' WHEN '6' THEN 'Sixth' END, @DayName = DATENAME(weekday, @startDate) SET @nextDay=1 WHILE @nextDate <= @endDate BEGIN INSERT INTO @retValue values (@nextDay,@nextDate, @WeekOfMonthNum, @WeekOfMonthDes, @DayName) SELECT @nextDay=@nextDay + 1 SELECT @nextDate = DATEADD(day,1,@nextDate), @WeekOfMonthNum = DATEDIFF(week, DATEADD(MONTH, DATEDIFF(MONTH,0, @nextDate),0), @nextDate) + 1, @WeekOfMonthDes = CASE @WeekOfMonthNum WHEN '1' THEN 'First' WHEN '2' THEN 'Second' WHEN '3' THEN 'Third' WHEN '4' THEN 'Fourth' WHEN '5' THEN 'Fifth' WHEN '6' THEN 'Sixth' END, @DayName = DATENAME(weekday, @nextDate) CONTINUE END WHILE(@nextDay <=31) BEGIN INSERT INTO @retValue values (@nextDay,@nextDate, 0, '', '') SELECT @nextDay=@nextDay + 1 END RETURN END
크로스 달과 날짜의 비교를 위해 날짜 체크에 참여합니다.
-
==============================
8.내 생각 엔 "365.25"곧 이상 실패 할 것이다 사용하고 있습니다.
내 생각 엔 "365.25"곧 이상 실패 할 것이다 사용하고 있습니다.
나는 "365.25"를 사용하여 작업 솔루션을 테스트 그래서 그리고 그것은 모든 경우에 동일한 행 번호를 반환하지 않습니다. 예를 들어 여기 :
http://sqlfiddle.com/#!3/94c3ce/7
2016 년과 2116으로 테스트하고 그 차이를 볼 수 있습니다. / 8에 의하여 / 7 두 쿼리를 볼 드 난 단지 하나 개의 링크 만 변화를 게시 할 수 있습니다. (/ 10 및 제 답변 / 11)
그래서, 나는 포인트가 시작하는 날로부터 확정, 다음 생일 후 관심의 내 범위에있는 경우 비교이 다른 쿼리를 제안한다.
SELECT * FROM Employees WHERE CASE WHEN (DATEADD(yyyy,DATEDIFF(yyyy, birthdt, @fromDate),birthdt) < @fromDate ) THEN DATEADD(yyyy,DATEDIFF(yyyy, birthdt, @fromDate)+1,birthdt) ELSE DATEADD(yyyy,DATEDIFF(yyyy, birthdt, @fromDate),birthdt) END BETWEEN @fromDate AND @toDate
-
==============================
9.이것은 MS SQL 서버 솔루션입니다 : 그것은 30 일 생일 직원을 반환합니다.
이것은 MS SQL 서버 솔루션입니다 : 그것은 30 일 생일 직원을 반환합니다.
SELECT * FROM rojstni_dnevi WHERE (DATEDIFF (dd, getdate(), DATEADD ( yyyy, DATEDIFF(yyyy, rDan, getdate()), rDan) nex ) +365) % 365 < 30
-
==============================
10.한 달 미만의 경우 :
한 달 미만의 경우 :
SELECT * FROM people WHERE MOD( DATEDIFF( CURDATE( ) , `date_birth`) /30, 12 ) <1 and (((month(`date_birth`)) = (month(curdate())) and (day(`date_birth`)) > (day (curdate() ))) or ((month(`date_birth`)) > (month(curdate())) and (day(`date_birth`)) < (day (curdate() ))))
-
==============================
11.당신은 생일 날짜의 월과 일 부분을 추출 할 수 DATE_FORMAT를 사용할 수 있습니다.
당신은 생일 날짜의 월과 일 부분을 추출 할 수 DATE_FORMAT를 사용할 수 있습니다.
편집 : 미안 해요 그는 MySQL을 사용하지 않은 것을 보지 못했다.
-
==============================
12.이 T-SQL 사용 DATEPART입니다 가정하면 별도로 달과 날짜를 비교합니다.
이 T-SQL 사용 DATEPART입니다 가정하면 별도로 달과 날짜를 비교합니다.
http://msdn.microsoft.com/en-us/library/ms174420.aspx
또한, 모든 사람의 생일에서 현재 연도의 1 월 1 일을 차감 한 후 1900 년 (또는 획기적인 해 무엇이든)을 사용하여 비교합니다.
-
==============================
13.이러한 솔루션의 대부분은 가까이,하지만 당신은 몇 가지 추가 시나리오를 기억해야합니다. 생일과 슬라이딩 스케일로 작업 할 때, 당신은 다음 달에 전환을 처리 할 수 있어야합니다.
이러한 솔루션의 대부분은 가까이,하지만 당신은 몇 가지 추가 시나리오를 기억해야합니다. 생일과 슬라이딩 스케일로 작업 할 때, 당신은 다음 달에 전환을 처리 할 수 있어야합니다.
예를 들어 스티븐스 예제 월의 마지막 사일까지 생일 잘 작동합니다. 당신이 아니라 그것을 위해 조건 그래서, 다음 달 29, 30, 및 다음 1, 2, 3 : 그럼 당신은 오늘 29 일이 될 것 인 경우 유효한 날짜와 같은 논리 오류가 있습니다.
대안은 현재 연도의 생일 필드에서 날짜 및 하위 분석 표준 범위 비교를하는 것입니다.
-
==============================
14.또 다른 생각은 :. 자신의 생일 (또는 생일이 아직 다음 위처럼 비교 발생하지 않은 경우 사용 DATEPART 및 DATEADD 이렇게 더 하나에 전체 년 동안 자신의 나이를 추가합니다.
또 다른 생각은 :. 자신의 생일 (또는 생일이 아직 다음 위처럼 비교 발생하지 않은 경우 사용 DATEPART 및 DATEADD 이렇게 더 하나에 전체 년 동안 자신의 나이를 추가합니다.
http://msdn.microsoft.com/en-us/library/ms186819.aspx
년에 걸친 범위의 가장자리 케이스는 특수 코드를 가지고해야합니다.
보너스 팁 : BETWEEN ... AND 대신 생일 피연산자를 반복하는 사용하는 것이 좋습니다.
-
==============================
15.이 작업을해야합니다 ...
이 작업을해야합니다 ...
DECLARE @endDate DATETIME DECLARE @today DATETIME SELECT @endDate = getDate()+6, @today = getDate() SELECT * FROM Employees WHERE (DATEPART (month, birthday) >= DATEPART (month, @today) AND DATEPART (day, birthday) >= DATEPART (day, @today)) AND (DATEPART (month, birthday) < DATEPART (month, @endDate) AND DATEPART (day, birthday) < DATEPART (day, @endDate))
-
==============================
16.나는 몇 년 전 내 대학 프로젝트와 같은 문제에 직면했다. 두 개의 열에 : (DD MM) 나는 연도와 날짜 분할에 의해 (다소 족제비 방법으로) 반응했다. 그리고 그 전에, 내 프로젝트의 동료는 단순히 모든 날짜를 얻고 있었다 및 프로그래밍 방식으로 그들을 통해 것. 우리는 변화가 너무 비효율적 이었기 때문에 - 내 솔루션이 하나 더 우아하지 않는 것이. 또한, 자사의 여러 앱의 잠시 동안 사용되었습니다 데이터베이스에 수행하는 아마 가능합니다.
나는 몇 년 전 내 대학 프로젝트와 같은 문제에 직면했다. 두 개의 열에 : (DD MM) 나는 연도와 날짜 분할에 의해 (다소 족제비 방법으로) 반응했다. 그리고 그 전에, 내 프로젝트의 동료는 단순히 모든 날짜를 얻고 있었다 및 프로그래밍 방식으로 그들을 통해 것. 우리는 변화가 너무 비효율적 이었기 때문에 - 내 솔루션이 하나 더 우아하지 않는 것이. 또한, 자사의 여러 앱의 잠시 동안 사용되었습니다 데이터베이스에 수행하는 아마 가능합니다.
-
==============================
17.이것을를 사용 해보세요 :
이것을를 사용 해보세요 :
SELECT * FROM Employees WHERE DATEADD(yyyy, DATEPART(yyyy, @Today)-DATEPART(yyyy, Birthday), Birthday) > @Today AND DATEADD(yyyy, DATEPART(yyyy, @Today)-DATEPART(yyyy, Birthday), Birthday) < DATEADD(dd, @NumDays, @Today)
-
==============================
18.견과류! 나는 이것에 대해 생각을 시작했을 때 나는 다시 대답 왔을 때 사이 좋은 솔루션입니다. :)
견과류! 나는 이것에 대해 생각을 시작했을 때 나는 다시 대답 왔을 때 사이 좋은 솔루션입니다. :)
나는 함께했다 :
select (365 + datediff(d,getdate(),cast(cast(datepart(yy,getdate()) as varchar(4)) + '-' + cast(datepart(m,birthdt) as varchar(2)) + '-' + cast(datepart(d,birthdt) as varchar(2)) as datetime))) % 365 from employees where (365 + datediff(d,getdate(),cast(cast(datepart(yy,getdate()) as varchar(4)) + '-' + cast(datepart(m,birthdt) as varchar(2)) + '-' + cast(datepart(d,birthdt) as varchar(2)) as datetime))) % 365 < @NumDays
당신은 바로 날짜로 캐스트 GETDATE () 할 필요가 없습니다?
-
==============================
19.이 시험 하였다 답변의 몇 가지의 조합입니다. 이것은 특정 날짜가 될 것입니다 세 이후 다음 brithday을 찾을 수 있습니다. 또한 NUMDAYS 등은 7 일 찾고있는 범위 = 주를 제한합니다
이 시험 하였다 답변의 몇 가지의 조합입니다. 이것은 특정 날짜가 될 것입니다 세 이후 다음 brithday을 찾을 수 있습니다. 또한 NUMDAYS 등은 7 일 찾고있는 범위 = 주를 제한합니다
SELECT DISTINCT FLOOR(DATEDIFF(dd,Birthday, @BeginDate) / 365.25) + 1 age, DATEADD(yyyy, FLOOR(DATEDIFF(dd,Birthday, @BeginDate) / 365.25) + 1, Birthday) nextbirthday, birthday FROM table WHERE DATEADD(yyyy, FLOOR(DATEDIFF(dd,Birthday, @BeginDate) / 365.25) + 1, Birthday) > @BeginDate AND DATEADD(yyyy, FLOOR(DATEDIFF(dd,Birthday, @BeginDate) / 365.25) + 1, Birthday) < DATEADD(dd, @NumDays, @BeginDate) order by nextbirthday
-
==============================
20.동일을 달성하는 가장 좋은 방법
동일을 달성하는 가장 좋은 방법
DECLARE @StartDate DATETIME DECLARE @EndDate DATETIME SELECT Member.* from vwMember AS Member WHERE (DATEADD(YEAR, (DATEPART(YEAR, @StartDate) - DATEPART(YEAR, Member.dBirthDay)), Member.dBirthDay) BETWEEN @StartDate AND @EndDate)
-
==============================
21.직원을위한 다가오는 생일 - SQLSERVER
직원을위한 다가오는 생일 - SQLSERVER
DECLARE @sam TABLE ( EmployeeIDs int, dob datetime ) INSERT INTO @sam (dob, EmployeeIDs) SELECT DOBirth, EmployeeID FROM Employee SELECT * FROM ( SELECT *, bd_this_year = DATEADD(YEAR, DATEPART(YEAR, GETDATE()) - DATEPART(YEAR, dob), dob) FROM @sam s ) d WHERE d.bd_this_year > DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 0) AND d.bd_this_year <= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()), 3)
-
==============================
22.나는 쿼리하지만 구현하는 간단한 충분히에, MySQL을 위해 아마 가장 효율적인 방법을이를 사용했다.
나는 쿼리하지만 구현하는 간단한 충분히에, MySQL을 위해 아마 가장 효율적인 방법을이를 사용했다.
select * from `schema`.`table` where date_format(birthday,'%m%d') >= date_format(now(),'%m%d') and date_format(birthday,'%m%d') < date_format(DATE_ADD(NOW(), INTERVAL 5 DAY),'%m%d');
-
==============================
23.나는이 티켓이 폐쇄 나이 일 전하지만 올바른 SQL 쿼리가 봐주십시오지고의 이익을 위해왔다 생각합니다.
나는이 티켓이 폐쇄 나이 일 전하지만 올바른 SQL 쿼리가 봐주십시오지고의 이익을 위해왔다 생각합니다.
SELECT Employee_Name, DATE_OF_BIRTH FROM Hr_table WHERE /** fetching the original birth_date and replacing the birth year to the current but have to deduct 7 days to adjust jan 1-7 birthdate. **/ datediff(d,getdate(),DATEADD(year,datediff(year,DATEADD(d,-7,hr.DATE_OF_BIRTH),getdate()),hr.date_of_birth)) between 0 and 7 -- current date looks ahead to 7 days for upcoming modified year birth date. order by -- sort by no of days before the birthday datediff(d,getdate(),DATEADD(year,datediff(year,DATEADD(d,-7,hr.DATE_OF_BIRTH),getdate()),hr.date_of_birth))
-
==============================
24.더 쉬운 솔루션 :
더 쉬운 솔루션 :
select * from users with(nolock) where date_of_birth is not null and ( DATEDIFF(dd, DATEADD(yy, -(YEAR(GETDATE())-1900),GETDATE()), --Today DATEADD(yy, -(YEAR(date_of_birth)-1901),date_of_birth) ) % 365 ) = 30
-
==============================
25.나는 이것이 어떤 방법으로 U 도움이되기를 바랍니다 ....
나는 이것이 어떤 방법으로 U 도움이되기를 바랍니다 ....
select Employeename,DOB from Employeemaster where day(Dob)>day(getdate()) and month(DOB)>=month(getDate())
-
==============================
26.이 솔루션은 또한 내년 순서의 생일을 위해 처리합니다 : (DOB = 출생 일, BTY = 생일 올해; NBD = 다음 생일)
이 솔루션은 또한 내년 순서의 생일을 위해 처리합니다 : (DOB = 출생 일, BTY = 생일 올해; NBD = 다음 생일)
with rs (bty) as ( SELECT DATEADD(Year, DATEPART(Year, GETDATE()) - DATEPART(Year, dob), dob) as bty FROM Employees ), rs2 (nbd) as ( select case when bty < getdate() then DATEADD(yyyy, 1, bty) else bty end as nbd from rs ) select nbd, DATEDIFF(d, getdate(), nbd) as diff from rs2 where DATEDIFF(d, getdate(), nbd) < 14 order by diff
날짜 비교를 피할이 버전은 빠른 수 :
with rs (dob, bty) as ( SELECT dob, DATEADD(Year, DATEPART(Year, GETDATE()) - DATEPART(Year, DOB), DOB) as bty FROM employee ), rs2 (dob, nbd) as ( select dob, DATEADD(yyyy, FLOOR(ABS((-1*(SIGN(DATEDIFF(d, getdate(), bty))))+0.1)), bty) as nbd from rs ), rs3 (dob, diff) as ( select dob, datediff(d, getdate(), nbd) as diff from rs2 ) select dob, diff from rs3 where diff < 14 order by diff
범위는 다음 해 2 월의 29을 포함하면, 사용 :
with rs (dob, ydiff) as ( select dob, DATEPART(Year, GETDATE()) - DATEPART(Year, DOB) as ydiff from Employee ), rs2 (dob, bty, ydiff) as ( select dob, DATEADD(Year, ydiff, dob) as bty, ydiff from rs ), rs3 (dob, nbd) as ( select dob, DATEADD(yyyy, FLOOR(ABS((-1*(SIGN(DATEDIFF(d, getdate(), bty))))+0.1)) + ydiff, dob) as nbd from rs2 ), rs4 (dob, ddiff, nbd) as ( select dob, datediff(d, getdate(), nbd) as diff, nbd from rs3 ) select dob, nbd, ddiff from rs4 where ddiff < 68 order by ddiff
-
==============================
27.또한 DATEPART을 사용할 수 있습니다 :
또한 DATEPART을 사용할 수 있습니다 :
-- To find out Today's Birthday DECLARE @today DATETIME SELECT @today = getdate() SELECT * FROM SMIS_Registration WHERE (DATEPART (month, DOB) >= DATEPART (month, @today) AND DATEPART (day, DOB) = DATEPART (day, @today))
-
==============================
28.쿼리가 직원의 모든 다음 생일을 돌려 아래, 그것은 짧은 쿼리입니다.
쿼리가 직원의 모든 다음 생일을 돌려 아래, 그것은 짧은 쿼리입니다.
SELECT Employee.DOB, DATEADD( mm, ( ( ( ( DATEPART(yyyy, getdate())-DATEPART(yyyy, Employee.DOB ) ) + ( 1- ( ((DATEPART(mm, Employee.DOB)*100)+DATEPART(dd, Employee.DOB)) / ((DATEPART(mm, getdate())*100) + DATEPART(dd, getdate())) ) ) ) *12 ) ), Employee.DOB ) NextDOB FROM Employee ORDER BY NextDOB ;
위 쿼리는 현재 날짜를 제외한 모든 다음 달 다룰 것입니다.
-
==============================
29.sqlite3를위한 솔루션 :
sqlite3를위한 솔루션 :
SELECT *, strftime('%j', birthday) - strftime('%j', 'now') AS days_remaining FROM person WHERE :n_days >= CASE WHEN days_remaining >= 0 THEN days_remaining ELSE days_remaining + strftime('%j', strftime('%Y-12-31', 'now')) END ;
325.25로 나누어 솔루션은 나이를 얻기 위해, 또는 나를 위해 현재 연도 등으로 작업을 생년월일을하지 않았다 가져. 이것이하는 일은 계산해에게 두 daysOfTheYear (366)의 델타입니다. 생일이 올해는 아직 발생하지 않은 경우 자동으로 비교할 수 남은 일의 정확한 숫자를 얻을. 생일이 이미 일어난 경우, remaining_days는 음수가 될 것입니다, 당신은 여전히 현재 연도에 일의 총량을 추가하여 남아있는 일의 정확한 수를 얻을 수 있습니다. 이 경우 여분의 일이 잘으로 추가되기 때문에이 또한 제대로 윤년을 처리 (사용하여 DAYOFYEAR (10 진수 31))
-
==============================
30.
select BirthDate,Name from Employees order by Case WHEN convert(nvarchar(5),BirthDate,101) > convert(nvarchar(5),GETDATE(),101) then 2 WHEN convert(nvarchar(5),BirthDate,101) < convert(nvarchar(5),GETDATE(),101) then 3 WHEN convert(nvarchar(5),BirthDate,101) = convert(nvarchar(5),GETDATE(),101) then 1 else 4 end, convert(nvarchar(2),BirthDate,101),convert(nvarchar(2),BirthDate,105)
from https://stackoverflow.com/questions/83531/sql-select-upcoming-birthdays by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL은 : 저장 프로 시저 절에 어떻게 값을 전달합니다 (0) | 2020.04.20 |
---|---|
[SQL] SQL 삽입 쿼리 C #을 사용 (0) | 2020.04.20 |
[SQL] MySQL의 쿼리, MAX () + GROUP BY (0) | 2020.04.20 |
[SQL] 오라클에 연결하여 그룹의 여러 행 [중복] (0) | 2020.04.20 |
[SQL] 저장 프로 시저 거래-SQL SQL 서버 내에서 결과 세트에 대한 액세스 (0) | 2020.04.20 |