2009-10-12 2 views
1

varchar 변수에 "2009-07-17T00 : 00 : 00-05 : 00"형식의 데이터가 있습니다. 쿼리 나 TSQL을 사용하여이 데이터를 MS SQL 서버의 datetime 필드로 변환하려면 어떻게해야합니까? 당신은 SQL 서버 2008에있는 경우SQL datetime 값

+0

마지막 '-05 : 00'은 무엇입니까? 밀리 세컨드의 어떤 형태? – dotjoe

+0

dotjoe : 시간대입니다. –

+1

은'% '-05 : 00''과 같은 모든 필드입니까? 아마도 문자열 함수를 사용하여 정규 datetime으로 변환해야 할 것입니다. – dotjoe

답변

4

, 당신은 datetimeoffset 유형을 사용할 수 있습니다 :

2005에, datetimeoffset 데이터 유형이 당신을 위해 사용할 수 없습니다 때문에
select cast('2009-07-17T00:00:00-05:00' as datetimeoffset) 

. 표준 시간대 정보를 별도로 보관할 것인지 결정해야합니다. 그냥 datetime 부분을 원한다면, 단지 문자열에서 시간대 부분을 제거하고이 datetime로 캐스팅 : DATETIME으로

select cast(left('2009-07-17T00:00:00-5:00', 19) as datetime) 
+0

어떻게 든 작동하지 않습니다. "유형 datetimeoffset은 정의 된 시스템 유형이 아닙니다." 어떻게해야합니까? – THEn

+0

사용중인 SQL Server 버전은 무엇입니까? 'datetimeoffset'은 2008 년에 새로 추가되었습니다. –

+0

Microsoft SQL Server 2005 - 9.00.1406.00 (X64) Mar 3 2007 19:53:24 Copyright (c) 1988-2005 Windows NT 5.2에서 Microsoft Corporation Enterprise Edition (64 비트) 3790 : 서비스 팩 2) – THEn

2

캐스트가 작동하지 않습니다,하지만 형식 때문에, 유효한 XML 날짜 형식입니다 먼저 XML 형식을 통해 캐스트를 라우팅 할 수 있습니다.

declare @d varchar(50); 
select @d = '2009-07-17T00:00:00-05:00'; 

select x.value(N'.', N'datetime') from (select cast(@d as xml) as x) as t; 
+0

예. 이 데이터는 XML 파일에서 가져온 것입니다. 내가 SQL에서 그것을 할 어떤 식 으로든 [[STARTDATE] varchar (50) WITH OPENXML (@iTree, '/ List/DailyUpdate', 2)에서 SELECT [StartDate] FROM을 사용 했습니까? 나는 datetime 작업을 시도하지 않았다 ... – THEn

+1

OPENXML 대신 XML 방법을 사용할 수 있습니까? OPENXML은 공룡입니다. 그냥'SELECT xmlfield.value (N '(/ List/Daily/Update) [1]', N'datetime ') FROM table'이라고 말하면됩니다. OPENXML을 사용하면 WITH 구문을 사용하여 반환 스키마를 지정하고 StartDate를 datetime에 매핑해야합니다. 'SELECT StartDate FROM OPENXML (...) WITH (StartDate DATETIME)'. –

+0

또한 답의 쿼리는 "datetime을 문자열로 변환 할 때 변환하지 못했습니다."라는 내용을 계속 표시합니다. 어떤 생각? – THEn