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

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

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

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Хотя первоначальный ответ на этот вопрос был полезным, оставленный пользователем комментарий « 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
0 голосов
/ 26 мая 2018

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

CONVERT_TZ(`timestamp`,'+00:00',CONCAT(LEFT(`offset`, LENGTH(`offset`)-2),':',RIGHT(`offset`,2)));
...