2012-02-16 47 views
1

我在SQL命令方面很新穎,請隨身攜帶。從一列到另一列交換一部分值?

我有一個表:

dbo.Product

兩列:

SKU  Name 
---  ---- 
100A-B (F102397) 1 AFFF C-103 

我想和名稱的發佈一部分交換SKU(100A-B) (F102397),在SKU列中沒有括號。

所以它會像:

SKU  Name 
---  ---- 
F102397 (100A-B) 1 AFFF C-103 

而只是供參考,在「名稱」列不總是一致的。這意味着它不會總是像「1 AFFF C-103」。有時它可以是「1AFFFC-103」或「1AFFF C-103」等等,但具有不同的值。如果有空格/空格,你需要擔心下半場嗎?

反正這麼做?任何幫助將不勝感激。 :) 我與SQL-Server 2005的

** 編輯 **

更多的例子,我嘗試從它獲得工作。

大部分數據看起來像這樣的例子。它與一些SKU的空間混亂,但這是我沒有改變的選擇。

而我將()保留在「名稱」字段中。

SKU  Name 
---  ---- 
100A-B (F102397) 1 AFFF C-103 
101 A-F (F011889) TEST ITEM 
101 U-X (F060796) TEST ITEM 2 
102A-B (F102497) TEST ITEM 3 

結果

SKU  Name 
---  ---- 
F102397 (100A-B) 1 AFFF C-103 
F011889 (101 A-F) TEST ITEM 
F060796 (101 U-X) TEST ITEM 2 
F102497 (102A-B) TEST ITEM 3 
+3

你想提取/交換的部分總是在括號內? – 2012-02-16 17:16:08

+2

看起來正則表達式在SQL Server中會很有用的另一個原因。這絕對可以通過'PATINDEX','SUBSTRING'和'REPLACE'來完成。這不會很困難,但會變得很難看。在我們提供示例之前,或許您可以提供更多關於您需要完成的細節,以便有更好的方法去實現它。 – 2012-02-16 17:22:45

+1

我同意其他意見......請提供其他示例,以便我們瞭解範圍。同樣,如果任一列可爲空,或者可能不包含括號或用於標識子字符串的其他任何條件,請包括這些示例並說明在這些情況下應該做什麼。這很容易解決規則,然後來所有的例外,這是每個人更多的工作... – 2012-02-16 17:28:09

回答

2

你應該看看可用string functions。通常可以用這些做點什麼。

update dbo.Product 
set SKU = substring(Name, 2, charindex(')', Name)-2), 
    Name = stuff(Name, 2, charindex(')', Name)-2, SKU) 

這假定在名稱字段的開頭總是有一個(。名稱字段中總會有一個)。名稱或SKU都不包含空值。
如果不是這種情況,你必須在你的問題中指定你想要的結果。

如果您只需要查詢數據而不是更新,請使用select語句。

select substring(Name, 2, charindex(')', Name)-2), 
     stuff(Name, 2, charindex(')', Name)-2, SKU) 
from YourTableName 
+0

編輯我的原始帖子。 – jwahr 2012-02-16 18:00:09

+0

@jwahr在這裏試試吧:http://data.stackexchange.com/stackoverflow/query/61652/swapit – 2012-02-16 18:04:59

+0

@MickaelEriksson - 非常感謝,在我需要的地方幫助很多。現在我的下一個問題是,對其他人來說,這聽起來可能很明顯,但是我將如何去查找我的表(備份/測試表)(300多種產品)中的數據並應用您剛剛做的事情,但實際上並沒有更新表格?只看結果? – jwahr 2012-02-16 18:29:16