如何在没有任何的情况下将冒号插入 Postgres SELECT 的 Mac 地址



我正在尝试将Postgres数据库中MAC地址的SELECT输出从例如:ab12cd34ef56转换为AB:12:CD:34:EF:56,但我无法找到可以做到这一点的Postgres函数或正则表达式。

此外,该列被定义为 VARCHAR 因此我无法使用内置的 MAC 网络函数。

任何帮助将不胜感激!

我尝试了许多不同的字符串函数,但没有成功......

你可以像这样使用REGEX_REPLACE:

lanny=# SELECT TRIM(':' FROM REGEXP_REPLACE('ab12cd34ef56', '([a-fA-F0-9]{2})', '1:', 'g'));
btrim       
-------------------
ab:12:cd:34:ef:56
(1 row)

TRIM是必要的,因为这种替换本身会产生尾随冒号。

您可以使用子字符串和串联来完成此操作:

SELECT 
UPPER(
CONCAT(
SUBSTRING(mac, 1, 2), ':',
SUBSTRING(mac, 3, 2), ':',
SUBSTRING(mac, 5, 2), ':',
SUBSTRING(mac, 7, 2), ':',
SUBSTRING(mac, 9, 2), ':',
SUBSTRING(mac, 11)
)
)
FROM table

说明:我们将整个结果大写,然后选择mac列(我假设您的 mac 地址位于该列(,然后我们一次取字符串 2 个部分,在 mac 地址的每个部分之间添加一个冒号:

子字符串函数的行为如下SUBSTRING(value, start[, length])

所有这些函数都可以在Postgres的String函数文档中找到。

最新更新