我有一張表,其中包含一列可以ping通的計算機名稱,這些列表是作爲大表的一部分提供給我的。計算機名稱可能包含虛線域名和/或IP地址。我需要將計算機名稱和域名分離到各自的列中。訪問更新查詢無法更新特定記錄
例如:
ComputerFullName | ComputerName | Domain
comp1 | |
1.2.0.1 | |
comp3.place.com | |
1.2.1.45.place.com | |
我可以使用下面的查詢填寫域:
UPDATE Example
SET Domain = SWITCH(
ComputerFullName LIKE '#*.#*.#*.#*.*', MID(ComputerFullName, INSTR(1, REPLACE(ComputerFullName, '.', ' ', 1, 3), '.') + 1)
, ComputerFullName LIKE '#*.#*.#*.#*', NULL
, INSTR(1, ComputerFullName, '.') <> 0, MID(ComputerFullName, INSTR(1, ComputerFullName, '.') + 1)
);
我試過幾個查詢,更新計算機名稱列,最有前途的是:
UPDATE Example
SET ComputerName = SWITCH(
ComputerFullName LIKE '#*.#*.#*.#*.*', LEFT(ComputerFullName, INSTR(1, ComputerFullName, Domain) - 2)
, ComputerFullName LIKE '#*.#*.#*.#*', ComputerFullName
, INSTR(1, ComputerFullName, '.') <> 0, LEFT(ComputerFullName, INSTR(1, ComputerFullName, '.') - 1)
, TRUE, ComputerFullName
);
這個和其他所有的嘗試都返回了錯誤說「Microsoft Office Access更新查詢無法更新所有的記錄... Access沒有更新2場(S)由於類型轉換失敗......」
結果表看起來像:
ComputerFullName | ComputerName | Domain
comp1 | |
1.2.0.1 | |
comp3.place.com | comp3 | place.com
1.2.1.45.place.com | 1.2.1.45 | place.com
我要的表格是:
ComputerFullName | ComputerName | Domain
comp1 | comp1 |
1.2.0.1 | 1.2.0.1 |
comp3.place.com | comp3 | place.com
1.2.1.45.place.com | 1.2.1.45 | place.com
有什麼建議嗎?
雖然使用下面的答案,我意識到爲什麼我的上述查詢不起作用。即使條件爲假,Access也會評估SWITCH語句中的每個可能值。因此,當沒有域時,LEFT函數的長度參數是負數。
我會澄清這個問題。 comp1和1.2.0.1應位於ComputerName列中。 – mjoshawa
這是在Access中發生的。我可以爲此使用一個函數(比如迭代一個記錄集),但根據我的經驗,Access SQL查詢速度要快得多。可能會有成千上萬的記錄。 – mjoshawa