2017-04-30 2 views
-1

2015 년은 53 주, 2016 년은 52 주입니다. 따라서 CALMONTH는 주 숫자를 4로 나누고 천장으로 계산할 수 없습니다. CALWEEK는 201652, 201501201104과 같이보고됩니다. CALMONTH은 2015 년SQL Server : SAP 스타일 CALWEEK를 CALMONTH로 변환하는 방법?

가 어떻게 SQL 서버 2014 년 CALMONTH하는 SAP 스타일 CALWEEK을 변환 할 수 있습니다 %YEAR%MONTH 같은 연도의 201501201512로 범위 사이의 숫자?

+1

실제로 필요한 것은 무엇입니까? 1 ~ 2 개월이 될 수 있기 때문에 몇 주에서 몇 달로 변환 할 수 없습니다. SAP 함수를 참조하는 대신 적절한 예제를 추가하십시오. –

+0

@JamesZ 무엇을 원하십니까? SQL 필드에서 편집 할 SAP 필드가있는 데이터가 있습니다. CALWEEK를 CALMONTH로 변환해야합니다. 시작 데이터는 CALMONTH 및 CALWEEK 필드와 함께 제공되므로 매월부터 월간으로 돌아 오기 위해 일부 JOIN을 시도 할 수 있습니다. – hhh

+0

어떤 데이터 형식으로 저장됩니까? – Jason

답변

1

은 어쩌면 내가 미쳤다고하지만, 나는이 알아낼 종류의 재미라고 생각했다. 그 끈을 떼어 내고 그 첫날의 날짜를 알아야했습니다. 그런 다음 그 달을 알아내어 문자열로 다시 연결했습니다.

CREATE TABLE #f(
    CALWEEK VARCHAR(10)); 

INSERT #f (CALWEEK) 
VALUES ('201602'),('201606'),('201612'),('201624'),('201630'), 
    ('201632'),('201650'),('201652'),('201701'),('201706'),('201715'); 


SELECT CALWEEK, 
    --GETTING THE YEAR 
    CAST(DATEPART(yyyy,DATEADD(wk,DATEDIFF(wk,6,'1/1/' + 
    SUBSTRING(CALWEEK,1,4)) + 
    (SUBSTRING(CALWEEK,5,6)-1), 6))AS VARCHAR(4))+ 
    --GETTING THE MONTH 
    CASE WHEN LEN(
    CAST(DATEPART(mm,DATEADD(wk,DATEDIFF(wk,6,'1/1/' + 
    SUBSTRING(CALWEEK,1,4)) + 
    (SUBSTRING(CALWEEK,5,6)-1), 6)) AS VARCHAR(2))) = 1 
    THEN '0' + CAST(DATEPART(mm,DATEADD(wk,DATEDIFF(wk,6,'1/1/' + 
    SUBSTRING(CALWEEK,1,4)) + 
    (SUBSTRING(CALWEEK,5,6)-1), 6)) AS VARCHAR(2)) 
    ELSE CAST(DATEPART(mm,DATEADD(wk,DATEDIFF(wk,6,'1/1/' + 
    SUBSTRING(CALWEEK,1,4)) + 
    (SUBSTRING(CALWEEK,5,6)-1), 6)) AS VARCHAR(2)) END AS 'CALMONTH' 
FROM #f 

DROP TABLE #f