2011-11-25 25 views
2

我有一個員工表,其中的示例數據是這樣的。我使用SQL Server 2008在SQL Server中使用字符串連接與parsename函數

CREATE TABLE employee (name nvarchar(255)) 

insert into employee (name) values ('Alex,AlexMartin'), 
          ('John,John'), 
          ('Mayr,Mayr'), 
          ('Shel,Sheila'), 
          ('corolla,corolla,corolla3'), 
          ('Mary4,Mary,Mary'), 
          ('Justin,Justin,Justin'), 
          ('Sara,Sara,Sara,Sara'), 
          ('clarence,clarence,clarence458,clarence,clarence'), 
          ('fiesta,fiesta,fiesta,fiesta,fiesta'), 
          ('scorpio1,scorpio,scorpio,scorpio4,scorpio') 

我要刪除一個值,如果字符串中的所有值都相同的例子:John,John應該由「約翰」來代替。如果字符串中的所有名稱與Shel,Sheila不相同,則應保留這兩個值。 對此,我正在使用 update employee set name=(select PARSENAME(REPLACE(name, ',', '.'), 2)) where (select PARSENAME(REPLACE(name, ',', '.'), 2)) like (select PARSENAME(REPLACE(name, ',', '.'), 1)),但它正在將Mary4,Mary,Mary更改爲Mary。我嘗試了5個,4個和3個名字的組合,但沒有用。實際上,對於這五個名字,這個代碼根本不起作用。有沒有任何有效的方法來做到這一點?

回答

1

這將讓格式,你要尋找的數據:

CREATE TABLE #Employee (Name NVarChar(255)); 
INSERT INTO #Employee (Name) VALUES ('Alex,AlexMartin'), 
          ('John,John'), 
          ('Mayr,Mayr'), 
          ('Shel,Sheila'), 
          ('corolla,corolla,corolla3'), 
          ('Mary4,Mary,Mary'), 
          ('Justin,Justin,Justin'), 
          ('Sara,Sara,Sara,Sara'), 
          ('clarence,clarence,clarence458,clarence,clarence'), 
          ('fiesta,fiesta,fiesta,fiesta,fiesta'), 
          ('scorpio1,scorpio,scorpio,scorpio4,scorpio'), 
          ('Another'); 

SELECT Name, CASE 
WHEN CHARINDEX(Name, ',') = 0 THEN Name 
WHEN 
    REPLACE(REPLACE(Name, LEFT(Name, CHARINDEX(',', Name) - 1), ''), ',', '') = '' 
    THEN LEFT(Name, CHARINDEX(',', Name) - 1) 
    ELSE Name 
END Result 
FROM #Employee; 

DROP TABLE #Employee; 

它通過在逗號分隔的列表獲得的第一個名字。根據你的要求,所有的項目必須是相同的,以便壓縮列表,所以我們使用列表中的哪個元素進行比較並不重要。

從列表中刪除第一項的所有匹配項。然後刪除所有的逗號。如果結果值爲空(即''),那麼我們知道所有項目都是相同的。在這種情況下,第一個元素用作Result的值。否則,我們不改變原始列表。

編輯:您的某些數據中不能有,,所以我已經更新了答案來處理這個問題。如果分隔符不存在,它將返回相同的輸入。

+0

它實際上給我錯誤'無效的長度參數傳遞給左或SUBSTRING函數.' ...我正在使用sql服務器..我應該改變語法? – alex

+0

@Yuck ..感謝很多它的工作,在第一次當我剛剛用'CHARINDEX(',',Name)'替換了CHARINDEX(Name,',')'時,我正在編輯你的答案:) – alex