2014-12-30 3 views
0

SQL Query Select Case 문에서 GetDate 및 DateAdd를 사용할 수 있습니까? 내 쿼리의 일부는 다음과 같습니다. 그러나 클라이언트의 생년월일에 관계없이 결과로 OVER60 만 반환합니다. 이 작업을 수행하는 더 좋은 방법이 있습니까? 나는 초보자이며 Stack Overflow에 대한 나의 첫 번째 질문이므로 어떤 통찰력에도 감사드립니다.sql 쿼리 케이스 dateadd

SELECT G.ClientID, CONVERT(VARCHAR(10), ClientDob, 101) AS ClientDob 
, CASE 
     WHEN (G.ClientDob > GETDATE() AND G.ClientDob < dateadd(year, -13, GetDate()))THEN 'Under13' 
     WHEN (G.ClientDob >= DATEADD(YEAR, -13, GETDATE()) AND G.ClientDob < DATEADD(year, -20, GETDATE()))THEN '13-19' 
     WHEN (G.ClientDob >= DATEADD(Year, -20, GETDATE()) AND G.ClientDob < DATEADD(Year, -30, GETDATE())) THEN '20-29' 
     WHEN (G.ClientDob >= DATEADD(YEAR, -30, GETDATE()) AND G.ClientDob < DATEADD(YEAR, -45, GETDATE())) THEN '30-44' 
     WHEN (G.ClientDob >= DATEADD(Year, -45, GETDATE()) AND G.ClientDob < DATEADD(YEAR, -60, GETDATE())) THEN '45-59' 
     Else 'OVER60' 
END AS AgeCategory 
+2

당신은 그것이 mysql이라 확신합니까? 어쩌면 석사 SQL 서버? –

+0

은 'G.ClientDob> dateadd (year, -13, GetDate()))'do 2012 년 1 월 1 일 <12 월 1 일에'G.ClientDob ​​으로 설정하십시오. – xQbert

+0

예, 가능 합니다만,> 및 <거꾸로 한 것 같습니다. –

답변

0

MySQL 태그 에도 불구하고 SQL Server를 가정이 그것을 수행해야합니다

SELECT G.ClientID, CONVERT(VARCHAR(10), ClientDob, 101) AS ClientDob 
, CASE 
    WHEN (G.ClientDob > dateadd(year, -13, GetDate()))THEN 'Under13' 
    WHEN (G.ClientDob > DATEADD(year, -20, GETDATE()))THEN '13-19' 
    WHEN (G.ClientDob > DATEADD(Year, -30, GETDATE())) THEN '20-29' 
    WHEN (G.ClientDob > DATEADD(YEAR, -45, GETDATE())) THEN '30-44' 
    WHEN (G.ClientDob > DATEADD(YEAR, -60, GETDATE())) THEN '45-59' 
    Else 'OVER60' 
END AS AgeCategory 

당신은 <> 혼란을했다, 후속 WHEN 기준으로 이전의 기준을 부정 필요, 일치하는 첫 번째 기준은 없다 다른 사람은 평가되지 않습니다.

참고 : xQbert에서 언급했듯이 위의 내용은 미래의 생일이 없다고 가정합니다. 데이터에 미래의 생일이 존재할 수 있다면 (즉, 허용해서는 안 됨), 명시 적으로 처리해야합니다.

+2

요소가 누락되었습니다. 미래의 출생 날짜가있는 사람들이 OP 예에서 다른 것으로 떨어지며, 잘못된 것 같습니다. 이것은 그들이 13 세 이하로 떨어질 것입니다. 그들이 결과에 모두 속하는지 명확히 할 필요가 있음 – xQbert

+0

@xQbert 좋은 지적, 덧붙여 설명했다. 미래의 생일은 허용되어서는 안되지만, 우리는 결국 어떤 데이터로 끝날지 항상 통제 할 수는 없습니다. –

+0

그래, 나는 데이터가 존재해서는 안된다는 데 동의한다. 미래에 어떻게 생년월일을 가질 수 있었는지, 아직 사실이 아니다. 그러나 OP가이 사건을 명시 적으로 처리했기 때문에 분명히 밝힐 필요가 있습니다. – xQbert