2012-04-27 2 views
1

동부 표준시 및 ID 시간대 설정 테이블에서 모두 표시 시간을 저장했습니다. 시간대 설정 표에는 Timezone_id, GMT 오프셋 및 시간대 이름이 있습니다. 나는 쇼 타임이 원래의 시간대로 변환 당길 수있는 쿼리를 작성하는 것을 시도하고있다 등mysql 쿼리 시간대 변환

오프셋

GMT는, +6, -4, 3.5, -4.5처럼 저장됩니다. 나는 이렇게하고있다.

SELECT Date_format(CONVERT_TZ(CONVERT_TZ(A.START_TIME, '+00:00', '-5:00'), 
'+00:00',  CONCAT(B.GMT_OFFSET , ':00')), '%Y-%m-%e %r:%i') 
AS 'start_time' from shows A, tz_settings B AND <<JOINS>>; 

여기서 내가하는 일은 ET에서 GMT로 시간을 변환 한 다음 GMT 오프셋을 적용하는 것입니다. 테이블 :

START_TIME는 CONVERT_TZ

EDIT 전달할 "3.5"에서 "3.30"와 같은 또한 하나 이상의 문제로 변환되어 포맷 '2012년 4월 23일 10시 15분 0초'와 같은 데이터 형식에 구조. 주요 필드.

shows: 'id', 'show_name', 'stat_time', 'tz_id' 
    tz_settings: 'tz_id', 'gmt_offset','tz_name' 

아이디어가 있으십니까? 다른 모든 기능이 믹스에 도움이됩니까?

+0

작업 내용을 더 잘 이해할 수 있도록 게시 할 수 있습니까? – Zuul

+0

두 테이블의 기본 구조를 추가했습니다. –

+0

내가 이해할 수없는 한 가지는, ET에서 GMT로 변환하면 왜 그 변환에서 ET의 것을 제외 시키려고합니까? 그 때 ET에 모두 있다는 것을 진술했기 때문에? (또는 귀하의 질문을 잘못 읽었습니까?) – Zuul

답변

1

정말 당신이 겪고있는 문제가 무엇인지 몰라,하지만 난 당신의 구조로 2 개 MYSQL 테이블을 구축 :

MySQL의 테이블

TABLE shows ['id', 'show_name', 'start_time', 'tz_id'] 
TABLE tz_settings ['tz_id', 'gmt_offset','tz_name'] 

그리고이 MySQL의 쿼리 :

SELECT Date_format(CONVERT_TZ(CONVERT_TZ(A.START_TIME, '+00:00', '-5:00') , '+00:00', CONCAT(B.GMT_OFFSET, ':00')) , '%Y-%m-%e %r:%i') AS 'start_time' 
FROM shows A, tz_settings B 
WHERE A.id =1 
AND B.tz_id = A.tz_id 

결과는 전로했다 pected!


에 관계없이, 당신은 그것으로 오프셋 GMT를 저장해야하는 쿼리에 따라서 CONCAT을 잃고 성능 향상을 단순화하기 위해 전체 형식입니다. 예 : +5 대신 +05 : 00

어떤 방식 으로든 도움이됩니까? MYSQL IF를 포함 그것에 0.5로 오프셋 저장 GMT는,이 교체 될 경우, 그래서

SELECT Date_format(CONVERT_TZ(CONVERT_TZ(A.STAT_TIME, '+00:00', '-5:00') , '+00:00', if(B.GMT_OFFSET LIKE '%.5', REPLACE(B.GMT_OFFSET, '.5', ':30') , CONCAT(B.GMT_OFFSET, ':00'))) , '%Y-%m-%e %r:%i') AS 'start_time' 
FROM shows A, tz_settings B 
WHERE A.`id` =1 
AND B.`tz_id` = A.`tz_id` 

를 교체하려면


편집 : 그렇지 않으면, 30, 그것은을 추가합니다 : 00을 기존 값으로 설정합니다. (테스트하여 값을 예상대로 반환합니다.)

+0

문제가있는 곳입니다. 내 질문에서 볼 수 있듯이 GMT 오프셋은 +3.5, +6, + 4.5 등으로 저장됩니다. 그러나 우리는 +4.5를 어떻게 다루어야합니까 (+4 : 30이어야합니다)? –

+0

그러나 저장된 GMT 오프셋을 제어 할 수 있습니까?그리고 당신은 무엇을 의미합니까? 4.5는 4:30이어야합니까? – Zuul

+0

"GMT 오프셋을 저장할 수 없습니까?"라는 의미가 확실하지 않습니다. 하지만 지금은이 형식을 변경할 수 없습니다. 제 2 질문에 관해서. Convert_TZ는 "(+/-) 00:00"형식으로 세 번째 인수를 취합니다. 그래서 나는 여기서 4.5를 통과 할 수 없으며, +6을 "+6 : 00"으로 전달할 수 있습니다. –