MySQL перевернуть строку по два - PullRequest
0 голосов
/ 07 мая 2020

В базе данных MySQL у меня есть таблица, содержащая цвет в формате TColor (Delphi). Я хотел бы преобразовать его в hex.

|----|-----------|---------------------------|----------|
| id |   TColor  | LPAD(HEX(TColor), 6, '0') |  ??????  |
|----|-----------|---------------------------|----------|
|  1 |      255  |                    0000FF |  FF0000  |
|----|-----------|---------------------------|----------|
|  2 |    39423  |                    008080 |  808000  |
|----|-----------|---------------------------|----------|
|  3 |  8421504  |                    808080 |  808080  |
|----|-----------|---------------------------|----------|

Нормальный REVERSE() не будет обрезать его, так как на выходе получается BBGGRR, где только порядок цветов обратный, а не вся строка .

В JS я решил это, разбив его на пары по 2, перевернув массив и соединив его обратно ...

Но как решить это в MySQL?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

На самом деле это не строковая функция, это математическое вращение битов.

Глядя на , это нет альфы. И форма Delphi Tcolor - 00BBGGRR.

Для преобразования в RRGGBB

  ((TColor & 0xff) << 16 )      /* The RR shifted left by 2 bytes */
  | ((TColor & 0xff0000) >> 16) /* The BB shifted right by 2 bytes */
  | (TColor & 0x00FF00 )      /* The GG kept as it is */

fiddle

Примечание: существуют другие формы Tcolor, которые требуют другое преобразование.

0 голосов
/ 07 мая 2020

После того, как TColor представлен как строка, вы можете попробовать

select  HEX(concat(substr(Tcolor, 4,2),substr(Tcolor, 0,4)))

, например, используя UNHEX ()

select  HEX(concat(substr(unhex(Tcolor), 4,2),substr(unhex(Tcolor), 0,4)))

для inter, вы можете попробовать использовать CONVERT (VARBINARY (8), Tcolor )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...