В базе данных 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?

0
Akxe 7 Май 2020 в 13:52

2 ответа

Лучший ответ

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

select  hex(( TColor >> 8 ) | ( (TColor & 0xffff)  << 16)) from color

играть на скрипке

1
danblack 7 Май 2020 в 11:14

Как только цвет приведен в качестве строки, вы можете попробовать

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)))

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

0
scaisEdge 7 Май 2020 в 11:22