2017-09-20 2 views
0

yyyyMMddhh (2017092018) 문자열을 SQL Server 2012에서 Date으로 변환하는 방법은 무엇입니까?SQL Server에서 날짜 문자열로 변환하는 방법

T-SQL을 사용하지 않고 문장을 INSERT 절에 넣을 수 있습니까?

INSERT INTO [dbo].[Table](SomeColumn) 
VALUES (CONVERT(DATETIME, '2017092018', 'yyyyMMddhh')); 
+0

'T-SQL을 사용하지 않고 문장을 INSERT 절에 넣을 수 있습니까? '- 여기 묻는 것이 확실하지 않습니다 ... – Siyual

+0

sql에서 문자열 매개 변수로 함수를 작성하고 리턴하십시오. 날짜. 다른 사용자 정의 날짜 형식으로 함수를 실행할 수도 있습니다. – OnurBulbul

+0

문자열은 항상 정확한 형식입니까? 항상 같은 수의 문자입니까? – Siyual

답변

3

Declare @S varchar(50)='2017092018' 

Select convert(datetime,left(@S,8)) + convert(datetime,right(@S,2)+':00') 

반환

2017-09-20 18:00:00.000 

는 2012+ 경우에, 나는 당신이 예상치 못한 값을 가질 경우에 대비 try_convert()를 제안했다.

+0

+1이어야한다. 모순 된 답변을 게시하고 싶지 않았지만 다른 접근 방법을 생각해 냈습니다. dateadd (hour, convert (int, right (@s, 2)), 왼쪽 (@s, 8)) –

+0

@SeanLange 게시하십시오! 그것의 아름다움입니다 ... 옵션 –

+0

고마워요,하지만 거기에 변환 문자열을 날짜로 마스크 = ( –

0

당신은 DATETIMEFROMPARTS 사용할 수 있습니다

DECLARE @d NVARCHAR(10)='2017092018'; 

SELECT DATETIMEFROMPARTS(LEFT(@d,4),SUBSTRING(@d,5,2),SUBSTRING(@d,7,2),RIGHT(@d,2),0,0,0) ; 

Rextester Demo

편집 :

또 다른 옵션 :

DECLARE @S varchar(10)='2017092018' 
SELECT CAST(LEFT(@s, 8) AS DATETIME) + RIGHT(@s,2)/24.0; 

,113,

1

여기에 또 다른 접근법이 있습니다. John Cappelletti가 게시 한 것과 유사합니다. STUFF를 사용

Declare @S varchar(50)='2017092018' 

Select dateadd(hour, convert(int, right(@s, 2)), left(@s, 8)) 
+1

또한 0 + 오른쪽 (@ S, 2) 변환 (int +1 –

+1

'선택 CAST (왼쪽 (@s, 8) AS DATETIME) + RIGHT (@ s, 2) /24.0; – lad2025

1

다른 방법 :이 시간 앞에 공백을 추가

DECLARE @val VARCHAR(25) = '2017092018'; 

SELECT CONVERT(DATETIME,STUFF(@val, 9, 0, ' ') + ':00') 

은 다음 분 값을 :00을 추가합니다.

+1

이미 +1 ... 허용 된 답변이어야합니다. 처음 생각에 붙어 있습니다. –

+0

@JohnCappelletti 고양이를 다듬는 여러 가지 방법. – Tanner

관련 문제