2012-09-27 2 views
0

hhmmss을 나타내는 92845 날짜 형식이 있습니다.T-SQL 날짜 변환

SQL에서 datetime으로 변환하고 싶습니다.

SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-') 

을하지만, T-SQL은 hour 부분을 좋아하지 않는되어 나타납니다

나는이 같은 것을 사용할 수 있습니다.

감사합니다.

+1

일, 월, 년 무엇입니까? 또한, 당신이 제공 한 코드에서'datetime'으로 변환하는 것을 보지 못했습니다. 문제가 무엇입니까? SQL은 "맘에 들지 않는"무엇입니까? 오류 메시지가 있습니까? – cadrell0

+0

SQL Server의 문자열 조작 함수는 왼쪽이 아닌 문자열의 오른쪽 끝에서 작업 할 때 제한적이고 반복적입니다. a)이 문자열이 도착하는 형식과 b) T-SQL에서이 형식을 다시 지정해야하는 이유가 무엇입니까? –

답변

5

오후에 코드를 작성한 것처럼 보이지만 지금은 아침에 작동하지 않습니다. 절대 위치에 따라 물건을 만들려면 문자열이 항상 같은 길이인지 확인해야합니다. 이를 수행하는 한 가지 방법은 문자열을 0으로 채운 다음 맨 오른쪽 6자를 취하는 것입니다. 또한 H/M 분리 기호에 :이 아닌 -이 필요합니다.

SELECT STUFF(STUFF(RIGHT('0' + '84936', 6),3,0,':'),6,0,':'); 

결과 :

08:49:36 
이제

날짜로 변환 할 수 있습니다 : 92845 현재 어디

1900-01-01 08:49:36.000 
+0

당신의 대답은 – AnandPhadke

2

나도 몰라 :

SELECT CONVERT(DATETIME, STUFF(STUFF(RIGHT('0' + '84936', 6),3,0,':'),6,0,':')); 

결과 저장된. 이 변수에 있다면,이 같은 작동합니다 :

declare @t varchar(6) = '92845'; 
declare @fullt char(6) = RIGHT('000000' + @t,6) 

select DATEADD(second, 
    SUBSTRING(@fullt,1,2) * 3600 + 
    SUBSTRING(@fullt,3,2) * 60 + 
    SUBSTRING(@fullt,5,2),0) 

결과 :이 결과 세트의 컬럼에 있다면

1900-01-01 09:28:45.000 

는, 당신은 예를 들어, 사용하여 유사한 조작을 수행 할 수 있습니다 하위 쿼리

0

이 시도 :

declare @t varchar(6) = '134524' 
select CASE WHEN len(@t)=5 then convert(datetime,convert(varchar(10),CAST(getdate() as date))+' '+'0'+LEFT(@t,1)+':'+SUBSTRING(@t,2,2)+':'+SUBSTRING(@t,4,2)) 
else convert(datetime,convert(varchar(10),CAST(getdate() as date))+' '+LEFT(@t,2)+':'+SUBSTRING(@t,3,2)+':'+SUBSTRING(@t,5,2)) end 
+0

당신은 '134524'와 같은 시간을 보셨습니까? –

+0

@ Aaron- 정말 잘 잡습니다. 스크립트 pls 체크를 편집했습니다. – AnandPhadke

+0

와우, 불쾌감은 불필요하게 복잡합니다. 또한 데이트로 캐스팅 한 이유는 무엇입니까? 영업 이익이 2008+ 이상이라는 것을 알고 있습니까? –