2016-02-24 76 views
2

我試圖在SQL Server中以字母「N」,以取代所有的字母串「L」和所有的數量2014年SQL Server:更新替換語句 - 代碼失敗或錯誤?

我使用下面的語句:

update my_table 
set column2 = replace(column1, 'a', 'L'); 

update my_table 
set column2 = replace(column1, 'b', 'L'); 

update my_table 
set column2 = replace(column1, '1', 'N'); 
etc. etc. 

的問題是,當我執行查詢時,我得到那個column2 = column1例如abc(column1)= abc(column2)

如果我只查詢一個提交,例如update my_table set column2 = replace(column1, 'a', 'L');然後它工作正常,它將取代所有A到L.

我試圖用Sqlite執行此查詢並使用較小的數據庫測試它,它工作得很好,但我真的需要在mssql中完成這項工作。

我真的非常感謝這個問題的任何支持。

我剛開始使用SQL Server,並且仍試圖採用更改。

p.s. column2 varchar(64)

回答

0

我不知道,如果你在你的COLUMN_1有一個固定長度的數據,例中是固定的,你可以使用以下命令:

declare @Index int=1 

while(@Index<= your data length here) 
begin 
    update my_table 
    set column_2 = REPLACE(substring(column_1, @Index, 1), 
          case 
           when ASCII(substring(column_1, @Index, 1)) between 48 and 57 
           then 'N' 
           else 'L' 
          end) 

    set @Index = @Index + 1 
end 
+0

需要區分第一次更新和其他人,導致其他人應該更新column_2而不是1 – Shawky

1

這就是我想在你的代碼中發生的事情。考慮column2'123456'column1'ab1'。因此,然後運行在第一次更新:

update my_table set column2 = replace(column1, 'a', 'L'); 

列1 = AB1
列2 = Lb1的

第二次更新:

update my_table set column2 = replace(column1, 'b', 'L'); 

列1 = AB1
COLUMN2 = aL1

第三次更新:

update my_table set column2 = replace(column1, '1', 'N'); 

列1 = AB1
列2 = ABN

所以,因爲你永遠不改變column1你將始終以 「最新版本」 和更新。那麼如何解決這個問題。這是不是很好的一個方法是這樣的:

update my_table set column2 = 
    replace(
      replace(
       replace(column1, 'a', 'L'), 
      'b', 'L'), 
    '1', 'N'); 

列1 = AB1
列2 = LLN

+0

謝謝您的回答。我會嘗試你的代碼,看看它返回什麼:) – mssqlw