Как преобразовать значение смещения часового пояса, такого как «-0400», к значению с двоеточием, таким как «-04: 00» в MySQL?

0

Таким образом, у меня есть база данных MySQL 5.7, которая хранит временную метку UTC, а также смещение часового пояса в двух отдельных столбцах. Часовой пояс находится в timezone а смещение offset.

Из того, что я понимаю, я могу потенциально получить фактическое смещение, рассчитанное не-UTC, запустив команду, например, используя CONVERT_TZ:

CONVERT_TZ('timestamp','+00:00','offset')

Но проблема Im сталкивается с тем, что значение смещения хранится без двоеточия, отделяющего часы от минут следующим образом: -0400.

Чтобы иметь возможность правильно использовать CONVERT_TZ мне нужно как-то изменить -0400 на -04:00, но как? Есть ли метод регулярных выражений?

Я мог бы сделать что-то подобное с помощью REPLACE, но это все еще кажется неаккуратным:

CONVERT_TZ('timestamp','+00:00',REPLACE('offset','00',':00'))
Теги:
timestamp
timezoneoffset
mysql-5.7

2 ответа

0
Лучший ответ

Хотя первоначальный ответ на этот вопрос был полезен, комментарий, оставленный пользователем " Michael - sqlbot ", был еще более полезным. Он использует функцию строки INSERT() и с этим я смог разработать следующее, и он отлично работает!

CONVERT_TZ('timestamp','+00:00',INSERT('offset',LENGTH('offset')-1,0,':'));

И это результаты с использованием следующих временных меток и соответствующих смещений:

SELECT CONVERT_TZ('2018-05-28 02:34:58','+00:00',INSERT('+0300',LENGTH('+0300')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 07:50:12','+00:00',INSERT('+0400',LENGTH('+0400')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 09:23:34','+00:00',INSERT('+0530',LENGTH('+0530')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 12:16:56','+00:00',INSERT('+1000',LENGTH('+1000')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 16:07:17','+00:00',INSERT('-0200',LENGTH('-0200')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 20:02:05','+00:00',INSERT('-0700',LENGTH('-0700')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 23:33:03','+00:00',INSERT('-1000',LENGTH('-1000')-1,0,':'));
SELECT CONVERT_TZ('2018-05-28 23:33:03','+00:00',INSERT('-0000',LENGTH('-0000')-1,0,':'));

И вот результаты:

  • 2018-05-28 02:34:58 со смещением +0300 становится: 2018-05-28 05:34:58
  • 2018-05-28 07:50:12 со смещением +0400 становится: 2018-05-28 11:50:12
  • 2018-05-28 09:23:34 со смещением +0530 становится: 2018-05-28 14:53:34
  • 2018-05-28 12:16:56 со смещением +1000 становится: 2018-05-28 22:16:56
  • 2018-05-28 16:07:17 со смещением -0200 становится: 2018-05-28 14:07:17
  • 2018-05-28 20:02:05 со смещением -0700 становится: 2018-05-28 13:02:05
  • 2018-05-28 23:33:03 со смещением -1000 становится: 2018-05-28 13:33:03
  • 2018-05-28 23:33:03 со смещением -0000 становится: 2018-05-28 23:33:03
1

Чтобы вставить двоеточие в столбце смещения, вы можете использовать следующее:

CONVERT_TZ('timestamp','+00:00',CONCAT(LEFT('offset', LENGTH('offset')-2),':',RIGHT('offset',2)));
  • 0
    Отличное решение! Не уверен, что он более надежный, чем REPLACE но, тем не менее, хорошее решение.
  • 1
    У RELPACE будет проблема в том, что он не будет работать для всех часовых поясов, которые не выравниваются ежечасно. Индия является наиболее важным примером, который является +5: 30
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню