2015-01-02 2 views
4

월 이름 만 알고있는 달을 가져오고 싶습니다. (월 이름이 1 인 경우 1을 반환해야 함)월 번호 만 월 이름 만 전달하십시오

나는 이것을 시도했다.

SELECT DATEPART(MM,'january 01 2011') 

하지만 여기서 전체 날짜 값 (2011 년 1 월 1 일)을 전달하고 싶습니다. 그러나 나는 단지 월 이름을 전달해야합니다. ('사례'를 사용하지 않음)

어떤 방법이 있습니까?

+0

[Stay awa 게으른 속기에서부터] (http://sqlblog.com/blogs/aaron_bertrand/archive/2011/09/20/bad-habits-to-kick-using-shorthand-with-date-time-operations.aspx). 'MONTH'를 타이핑하고 코드를 스스로 문서화하여 부팅하는 것이 훨씬 더 오래 걸리나요? –

답변

5

이 같은 달에 이름을 전달하고 그것을 (어떤 다른 일 + 년 당신이 원하는 또는) 01 2011를 추가 할 수 있습니다 :

@declare monthName varchar(20); 
@set monthName = 'january'; 

SELECT DATEPART(MM,monthName+' 01 2011') 

또는

SELECT MONTH(monthName+' 01 2011') 
+0

여기도 1 년을 통과해야합니다. 달 이름 만 전달하면됩니다. – Tom

+1

@Tom - 당신은 ** 단 하나의 변수 인'monthName'만을 전달합니다. –

+1

'January'이라는 문자열을 전달했지만 실제로 코드를 실행하는 사용자가 다른 언어 설정 (예 :'SET LANGUAGE FRENCH;')을 시도하면 안전하지 않습니다. 걱정이된다면 달 테이블이 당신을 보호 할 수 있습니다. –

0

당신은 또한 사용할 수 있습니다 Case

DECLARE @month VARCHAR(15)='mar' 

SELECT CASE @month 
     WHEN 'Jan' THEN 1 
     WHEN 'feb' THEN 2 
     WHEN 'mar' THEN 3 
     WHEN 'apr' THEN 4 
     WHEN 'may' THEN 5 
     WHEN 'jun' THEN 6 
     WHEN 'jul' THEN 7 
     WHEN 'aug' THEN 8 
     WHEN 'sep' THEN 9 
     WHEN 'oct' THEN 10 
     WHEN 'nov' THEN 11 
     WHEN 'dec' THEN 12 
     END 
+0

괜찮습니다. 하지만 나는 더 적은 수의 라인으로 솔루션을 찾고있다. (케이스를 사용하지 않고) – Tom

0
@declare monthName varchar(20); 
@set monthName = 'JUNE'; 

SELECT DATEPART(MM,monthName+' 01 2014') //Monthname +'any date and year'