Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 如何从Postgres SELECT将冒号插入Mac地址而不使用任何_Regex_Postgresql_Insert - Fatal编程技术网

Regex 如何从Postgres SELECT将冒号插入Mac地址而不使用任何

Regex 如何从Postgres SELECT将冒号插入Mac地址而不使用任何,regex,postgresql,insert,Regex,Postgresql,Insert,我正在尝试将Postgres数据库中的MAC地址选择的输出从例如ab12cd34ef56转换为AB:12:CD:34:EF:56,但我还没有找到一个Postgres函数或正则表达式来实现这一点 此外,该列被定义为VARCHAR,因此我不能使用内置的MAC网络函数 任何帮助都将不胜感激 我尝试了许多不同的字符串函数,但没有成功…您可以这样使用: 修剪是必要的,因为此替换本身将产生尾随冒号。您可以这样使用: 修剪是必要的,因为此替换本身将产生一个尾随冒号。您可以通过子字符串和连接来完成此操作: 选择

我正在尝试将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)