Regex 如何从Postgres SELECT将冒号插入Mac地址而不使用任何
我正在尝试将Postgres数据库中的MAC地址选择的输出从例如ab12cd34ef56转换为AB:12:CD:34:EF:56,但我还没有找到一个Postgres函数或正则表达式来实现这一点 此外,该列被定义为VARCHAR,因此我不能使用内置的MAC网络函数 任何帮助都将不胜感激 我尝试了许多不同的字符串函数,但没有成功…您可以这样使用:Regex 如何从Postgres SELECT将冒号插入Mac地址而不使用任何,regex,postgresql,insert,Regex,Postgresql,Insert,我正在尝试将Postgres数据库中的MAC地址选择的输出从例如ab12cd34ef56转换为AB:12:CD:34:EF:56,但我还没有找到一个Postgres函数或正则表达式来实现这一点 此外,该列被定义为VARCHAR,因此我不能使用内置的MAC网络函数 任何帮助都将不胜感激 我尝试了许多不同的字符串函数,但没有成功…您可以这样使用: 修剪是必要的,因为此替换本身将产生尾随冒号。您可以这样使用: 修剪是必要的,因为此替换本身将产生一个尾随冒号。您可以通过子字符串和连接来完成此操作: 选择
修剪
是必要的,因为此替换本身将产生尾随冒号。您可以这样使用:
修剪
是必要的,因为此替换本身将产生一个尾随冒号。您可以通过子字符串和连接来完成此操作:
选择
上层(
海螺(
子串(mac,1,2),“:”,
子串(mac,3,2),“:”,
子串(mac,5,2),“:”,
子串(mac,7,2),“:”,
子串(mac,9,2),“:”,
子串(mac,11)
)
)
从桌子上
说明:我们将整个结果大写,然后选择mac
列(我假设您的mac地址为),然后一次将字符串分成两部分,在mac地址的每个部分之间添加一个冒号:
子字符串函数的行为如下
子字符串(值,开始[,长度])
所有这些函数都可以在上找到。您可以使用子字符串和连接来完成此操作:
选择
上层(
海螺(
子串(mac,1,2),“:”,
子串(mac,3,2),“:”,
子串(mac,5,2),“:”,
子串(mac,7,2),“:”,
子串(mac,9,2),“:”,
子串(mac,11)
)
)
从桌子上
说明:我们将整个结果大写,然后选择mac
列(我假设您的mac地址为),然后一次将字符串分成两部分,在mac地址的每个部分之间添加一个冒号:
子字符串函数的行为如下
子字符串(值,开始[,长度])
所有这些函数都可以在上找到。正则表达式只提供空格和冒号。我不确定这个问题是否是Postgres版本的问题,但是这个服务器是Aruba Clearpass设备,所以我无法控制数据库。以下是我的测试结果:`选择不同的上限(radius_acct.calling_station_id)作为“Mac地址”,TRIM(':'来自REGEXP_REPLACE(radius_acct.calling_station_id),([a-fA-F0-9]{2}'),\1:','g'))作为“Mac Regex 1”,来自radius_acct Mac地址,Mac Regex 1 204c330784; 30784d,:::::`Regex只给我空格和冒号。我不确定这个问题是否是Postgres版本的问题,但是这个服务器是Aruba Clearpass设备,所以我无法控制数据库。以下是我的测试结果:`选择不同的上限(radius_acct.calling_station_id)作为“Mac Address”,TRIM(':'来自REGEXP_REPLACE(radius_acct.calling_station_id),([a-fA-F0-9]{2}'),\1:','g')作为“Mac regex1”,来自radius_acct Mac Address,Mac regex1 204c330784;`
lanny=# SELECT TRIM(':' FROM REGEXP_REPLACE('ab12cd34ef56', '([a-fA-F0-9]{2})', '\1:', 'g'));
btrim
-------------------
ab:12:cd:34:ef:56
(1 row)