2017-05-20 2 views
1

날짜와 3 개의 별도 필드를 만들려고하는데이 문제가 발생했습니다. 제 (DDMMYYYY 유럽 스타일) 날짜가 04032017 같은 경우, 코드 :SQL Server : 0으로 시작하는 하위 문자열이 꺼져 있습니다.

SELECT SUBSTRING(CAST(04032017 AS VARCHAR(38)), 2, 2) AS Month 

반환 03 (완벽한).

하지만 코드가 같은 경우 (제 제로는 지금 1!)

SELECT SUBSTRING(CAST(18022017 AS VARCHAR(38)), 2, 2) AS Month 

결과 80 SUBSTRING 이제 (1) 제 1 위치로부터 상기 제 예에서 계산되기 때문에 4 점을 출발점으로 삼았습니다.

분명히 모든 사건에 대해 1 개의 코드가 있어야하지만 그걸 제대로 이해하지 못합니다.

몇 가지 도움을 주시면 감사하겠습니다.

감사합니다,

+1

'CAST ('DDMMYYYY'AS VARCHAR)'가능성으로 재 작성 하시겠습니까? –

+1

'04032017'은 문자열이 아닌 int로 해석되므로 '4032017'입니다. –

답변

0

를 얻기 위해이 같은 VARCHAR을 분석 한 후 유효 기간 및 사용의 달() 함수로 변환해야 할 수 있습니다 J :

select SUBSTRING(right('00000000' + CAST(04032017 AS varchar(38)),8), 3, 2) as Month 
+1

테스트 해 보았는데 이것은 정상적으로 작동하는 것 같습니다! 감사! 다른 방법으로 직접 해결했습니다. – JamesW

0

당신이 당신을 위해 작동해야 명확한 방법을

declare @date nvarchar(10)='18022017' 
select Month(cast(CONCAT(SUBSTRING(@date,3,2),'/',SUBSTRING(@date,1,2),'/',SUBSTRING(@date,5,4)) as date)) 
0

좋아, 그냥 해결했다.

select SUBSTRING('04032017'), 2, 2) as Month 

이 잘 작동 : 및 날짜 주위에 따옴표를 넣어 (? 내가 처음에하는 것을 사용 했 이유를) 그냥 캐스트를 제거!

관련 문제