Как преобразовать целое число с отрицательным символом или без него в смещение часового пояса для CONVERT_TZ? - PullRequest
1 голос
/ 16 июня 2020

Итак, в таблице базы данных мы сохраняем смещение часового пояса места как целое число со знаком минус (- или da sh) перед ним или без него, в столбце varchar (3), например:

-5 (тики, очевидно, не являются частью значения)

Это необходимо использовать в функции CONVERT_TZ в параметре from_tz ... который работает только со строковым часовым поясом или смещением формат, например -05:00, который я пока не знаю, как это сделать.

function definition: CONVERT_TZ(dt, from_tz, to_tz)

Мне не представляется возможным создать что-то на другом языке для преобразования -5 в строковый часовой пояс, чем передать его from_tz потому что он должен быть в SQL из-за выборки и сравнения, и у нас нет времени, чтобы исправить значения данных и таблицу и ее реализацию на серверах.

Я пробовал REGEX, SIGN, SUBSTRING в различных комбинациях ... но они пока не обеспечивают согласованного решения для часового пояса, равного 0, -3 или 5 (и принуждение, похоже, не работает), и когда CONVERT_TZ не может сравниваться, он возвращает NULL, br съедая все, что полагается на него.

1 Ответ

0 голосов
/ 17 июня 2020

Это работа для SQL взлома строк.

SET @v := +4;
SELECT CONVERT_TZ(NOW(), 
                  CONCAT( IF(@v < 0 , '-', '+'),
                          RIGHT(CONCAT('00', CAST(ABS(@v) AS char(2)), ':00'), 5)),
                  'America/Halifax')

Это выражение CONCAT() превращает любое целое число n в 0n:00, а затем добавляет либо +, либо -. Это некрасиво, но работает.

...