从现有列中的数据在数据库中创建新列

时间:2010-08-24 04:59:44

标签: sql oracle

我有一张桌子

TableName: MACAddresses
Columns:
- Computer
- MACAddress

我想创建一个sql脚本,创建一个新列并使用冒号正确格式化mac地址(即使用Substring) - 创建一个名为CorrectMAC的新列

我如何使用Oracle?

1 个答案:

答案 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>