我有一张桌子
TableName: MACAddresses
Columns:
- Computer
- MACAddress
我想创建一个sql脚本,创建一个新列并使用冒号正确格式化mac地址(即使用Substring) - 创建一个名为CorrectMAC的新列
我如何使用Oracle?
答案 0 :(得分:5)
以下是一些测试数据:
SQL> select * from MACAddresses
2 /
COMPUTER MACADDRESS
---------- ------------
100 123456789abc
200 acef35dd6ecc
SQL>
添加新列非常简单:
SQL> alter table MACAddresses
2 add corrected_MACAddress varchar2(17)
3 /
Table altered.
SQL>
请注意,此时不能使其为NOT NULL,因为表中已有一些记录。因此,如果要应用此类约束,则需要先填充它。
这是更新新列的最简单方法。
SQL> update MACAddresses
2 set corrected_MACAddress = substr(macaddress, 1,2)||':'||
3 substr(macaddress, 3,2)||':'||
4 substr(macaddress, 5,2)||':'||
5 substr(macaddress, 7,2)||':'||
6 substr(macaddress, 9,2)||':'||
7 substr(macaddress, 11,2)
8 /
2 rows updated.
SQL> select * from MACAddresses
2 /
COMPUTER MACADDRESS CORRECTED_MACADDR
---------- ------------ -----------------
100 123456789abc 12:34:56:78:9a:bc
200 acef35dd6ecc ac:ef:35:dd:6e:cc
SQL>
现在,如果你有一个更复杂的模式,或者如果你想在一个regukar基础上执行这个操作,我建议你花费精力把它变成一个函数,并且可能同时删除那个重复。
最后,如果您想强制执行强制约束,您可以:
SQL> alter table MACAddresses
2 modify corrected_MACAddress not null
3 /
Table altered.
SQL>