преобразование шестнадцатеричной строки в формат ipv6 в postgresql - PullRequest
0 голосов
/ 08 мая 2018

У меня есть шестнадцатеричная строка типа \xfc80000000000000ea508bfff217b628 в формате bytea, и я хочу преобразовать ее в fc80:0000:0000:0000:ea50:8bff:f217:b628 в запросе выбора, я попытался:

select '0:0:0:0:0:0:0:0'::inet + encode(ip::bytea,'hex') from a;

но появляется следующая ошибка

ERROR:  operator does not exist: inet + text
LINE 1: select '0:0:0:0:0:0:0:0'::inet + encode(stationipv6::bytea,'...
                                       ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

1 Ответ

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

substring() работает со значениями bytea, и вы можете использовать это для извлечения отдельных частей байтов, чтобы преобразовать его в inet:

select concat_ws(':', 
                 encode(substring(stationipv6,  1, 2), 'hex'), 
                 encode(substring(stationipv6,  3, 2), 'hex'), 
                 encode(substring(stationipv6,  5, 2), 'hex'), 
                 encode(substring(stationipv6,  7, 2), 'hex'),
                 encode(substring(stationipv6,  9, 2), 'hex'), 
                 encode(substring(stationipv6, 11, 2), 'hex'), 
                 encode(substring(stationipv6, 13, 2), 'hex'), 
                 encode(substring(stationipv6, 15, 2), 'hex')
                 )::inet
from your_table

работает на bytea столбцах

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