[SQL] 나는 날짜 시간으로는 SQL 서버 2008 DateTimeOffset으로 변환 할 수있는 방법
SQL나는 날짜 시간으로는 SQL 서버 2008 DateTimeOffset으로 변환 할 수있는 방법
나는 DATETIME 필드까지하는 DATETIMEOFFSET 필드가하지만 오프셋의 통지를 복용하여 시간을 다시 계산 테이블을 변환 할 바라고 있어요. 이것은 사실상 값을 UTC로 변환합니다.
예를 들면.
CreatedOn: 2008-12-19 17:30:09.0000000 +11:00
그는로 변환 얻을 것이다
CreatedOn: 2008-12-19 06:30:09.0000000
또는
CreatedOn: 2008-12-19 06:30:09.0000000 + 00:00 -- that's a `DATETIMEOFFSET`, but `UTC`.
건배 :)
해결법
-
==============================
1.거의 모든 스타일을 사용하여 변환하면 DATETIME2 값이 UTC로 변환됩니다. 또한, DATETIME2에서 DATETIMEOFFSET로 변환은 단순히 +00 오프셋을 설정합니다 (! 오프셋 = 0)가 DATETIMEOFFSET 변환하는 빠른 방법은, 그래서, 아래의 당, 00 DATETIMEOFFSET에 (+00 : 00)
거의 모든 스타일을 사용하여 변환하면 DATETIME2 값이 UTC로 변환됩니다. 또한, DATETIME2에서 DATETIMEOFFSET로 변환은 단순히 +00 오프셋을 설정합니다 (! 오프셋 = 0)가 DATETIMEOFFSET 변환하는 빠른 방법은, 그래서, 아래의 당, 00 DATETIMEOFFSET에 (+00 : 00)
declare @createdon datetimeoffset set @createdon = '2008-12-19 17:30:09.1234567 +11:00' select CONVERT(datetime2, @createdon, 1) --Output: 2008-12-19 06:30:09.12 select convert(datetimeoffset,CONVERT(datetime2, @createdon, 1)) --Output: 2008-12-19 06:30:09.1234567 +00:00
-
==============================
2.나는이 SQL 옵션 내장 사용하십시오 :
나는이 SQL 옵션 내장 사용하십시오 :
select SWITCHOFFSET(cast('2008-12-19 17:30:09.0000000 +11:00' as datetimeoffset),'+00:00')
-
==============================
3.난 당신이 날짜 시간에 DateTimeOffset으로 변환하려는 경우, 당신이 계정에 당신이 변환하는 서버의 시간대를 취할 필요가 있다고 생각이 오래된 질문은 알고 있지만. 당신은 단지 CONVERT를 할 경우 (날짜, @MyDate, 1) 당신은 단순히 잘못된 변환 시간대, 가능성이 결과를 잃게됩니다.
난 당신이 날짜 시간에 DateTimeOffset으로 변환하려는 경우, 당신이 계정에 당신이 변환하는 서버의 시간대를 취할 필요가 있다고 생각이 오래된 질문은 알고 있지만. 당신은 단지 CONVERT를 할 경우 (날짜, @MyDate, 1) 당신은 단순히 잘못된 변환 시간대, 가능성이 결과를 잃게됩니다.
나는 당신에게 그런 다음, 상기하는 DateTimeOffset 값의 오프셋 (offset) 스위치 변환을 수행하는 최초의 필요성을 생각합니다.
DECLARE @MyDate DATETIMEOFFSET = '2013-11-21 00:00:00.0000000 -00:00'; SELECT CONVERT(DATETIME, SWITCHOFFSET(@MyDate, DATEPART(tz,SYSDATETIMEOFFSET())));
변환의 결과는 ': 00 : 00 2013년 11월 21일 00.0000000 -00 : 00 날짜 시간 오프셋에있어 서버에있다 -7 : 00 : 00.000 00 17 2013년 11월 20일 것이다. 위의 논리로는하지 않습니다 이잖아요 시간 서버의 영역 또는 날짜 시간 값의 오프셋 (offset)는,이 서버 시간대에서 날짜 시간으로 변환됩니다 것.
난 당신이 날짜 시간 값이 값은 서버의 시간대에 있다고 가정 포함되어 있기 때문에이 작업을 수행 할 필요가 생각합니다.
-
==============================
4.참고 : 스타일 ( "126"여기가) 지정되지 않은 경우 시간대 정보는 변환에 삭제됩니다. 그것은 또한 다른 스타일의 일부 폐기 될 수있다, 나도 몰라 않음 - TZ 정보는 어떤 경우에 제대로 다음 조정합니다. CAST 및 CONVERT를 참조하십시오.
참고 : 스타일 ( "126"여기가) 지정되지 않은 경우 시간대 정보는 변환에 삭제됩니다. 그것은 또한 다른 스타일의 일부 폐기 될 수있다, 나도 몰라 않음 - TZ 정보는 어떤 경우에 제대로 다음 조정합니다. CAST 및 CONVERT를 참조하십시오.
select convert(datetime, cast('2008-12-19 17:30:09.0000000 +11:00' as datetimeoffset), 126) as utc;
해피 SQL'ing.
편집하다
확실하지가 중요하지만 경우 ... 날짜는 실제로 정밀도 / 정확도의 수준을 저장할 수 없습니다. 위의 실행되면 소수 초는 3 자리 숫자로 잘립니다 (과 정확성이 적은보다)입니다. DATETIME2와 동일 같은 (그리고 DATETIMEOFFSET (7))은 비 절단 값을 생성한다 :
select convert(datetime2, cast('2008-12-19 17:30:09.1234567 +11:00' as datetimeoffset(7)), 126) as utc;
-
==============================
5.일광 절약 시간의 계정을 위해, 나는 다음을 사용 :
일광 절약 시간의 계정을 위해, 나는 다음을 사용 :
CONVERT( DateTime, SWITCHOFFSET( CONVERT( DateTimeOffset, CONVERT( DateTime, [time_stamp_end_of_interval], 120 ) ), DATENAME( TzOffset, CONVERT( DateTime, [time_stamp_end_of_interval], 120 ) AT TIME ZONE 'Pacific Standard Time' ) ) ) AS GOOD_PST
참고 : time_stamp_end_of_interval은 VARCHAR입니다
from https://stackoverflow.com/questions/4953903/how-can-i-convert-a-sql-server-2008-datetimeoffset-to-a-datetime by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] null 값과 MySQL의 비교 (0) | 2020.04.15 |
---|---|
[SQL] MySQL의 : LIKE의 역 버전은 무엇입니까? (0) | 2020.04.15 |
[SQL] 어떻게 SQL과 중복 행을 삭제하려면? (0) | 2020.04.15 |
[SQL] 포스트 그레스 데이터 형식 캐스트 (0) | 2020.04.15 |
[SQL] 어떻게 SQL에서 여러 문자를 교체하는 방법? (0) | 2020.04.15 |