2011-10-04 6 views
1

날짜/시간 값을 varchar (max) (묻지 않음)로 저장하는 SQL Server 2008 테이블이 있습니다. 이 값을 PST에서 GMT로 변환하는 임무를 맡았습니다. 값은 각 행의 두 가지 형식 중 하나에 2009 3월 12일다른 문자열을 날짜 시간으로 변환하는 방법

오후 4시

또는

2009년 3월 12일 오후 4시 0분 0초

내가 사용 어떻게 T는 - SQL을, 어떤 형식으로 날짜를 (내가 아마 문자 또는 숫자 값으로 시작하는지 확인하고 생각) 다음 SQL datetime 변수에 변환 할 수 있도록 DATEADD 사용할 수있는 시간을 추가 할 수 있습니다 ?

커서를 만들고 행을 반복하기 위해 T-SQL을 작성했지만, 어떤 형식인지 감지하고 DATETIME으로 변환하는 방법을 모르겠습니다. 나는 아마 그것을 해킹 할 수있을 것이라고 확신한다. 그러나 나는 SO에서 여기있는 사람들이 그것을 할 올바른 방법을 제공 할 수 있다고 생각했다.

+0

개인적으로 확실히 하나가 될 것이라고 확신합니까? 아니면 다른 형식이 될 것입니까? –

+0

저는이 두 가지 형식 중 하나에서 확신합니다. 이것은 실행중인 일회성 데이터 업데이트이며 모든 데이터를 검토했습니다. 이 두 가지를 제외한 다른 형식은 없습니다. – Scott

답변

2

당신이 두 시나리오

다음
SELECT convert(datetime, '3/12/2009 4:00:00PM') -- 2009-03-12 16:00:00.000 

SELECT convert(datetime, 'Mar 12 2009 4:00PM') -- 2009-03-12 16:00:00.000 

당신이

+0

변환을 수행하는 가장 좋은 방법입니다. 행을 업데이트하는 방법에 대해서는 커서를 사용하여 루프를 반복하는 방법에 대해 언급했습니다. UPDATE 문을 사용하는 것이 더 빠를 것입니다 (그리고 논란의 여지는 있지만 "SQL과 유사합니다"). 'old' 열에 문자열을 가지고 있고'datetime' 값을'new' 열에 넣기를 원한다면 다음과 같이하면됩니다. '당신의 테이블 SET new = convert (datetime, old)'를 업데이트하십시오. –

+0

@Massimiliano 당신의 솔루션은 월과 일이 12보다 작거나 같은 모든 날짜에 잘 작동합니다. 그러나'SELECT convert (datetime, '13/12/2009 4:00 : 00PM ')'이면 범위를 벗어나는 값의 오류를 나타내지 만'SELECT convert (datetime, '12/13/2009 4:00:00 PM')'에 대해서는 정상적으로 실행됩니다. 그렇다면이 문제를 어떻게 해결할 수 있을까요? –

0

이 나를 위해 잘 작동을 원하는대로 당신이 그것을 포맷 할 수 있습니다 작동합니다 convert 기능을 사용할 수 있습니다, 더 루프 또는 커서는 필요하지 않습니다 :

DECLARE @Date varchar(MAX) 

SET @Date = 'Mar 12 2009 4:00PM' 

SELECT DATEADD(hh,8,CONVERT(DATETIME,@date)) 

SET @Date ='3/12/2009 4:00:00PM' 

SELECT DATEADD(hh,8,CONVERT(DATETIME,@date)) 
관련 문제