2016-07-13 7 views
8

Ich habe eine Tabelle Temp mit column NAME und Daten wie folgt aus:Wie teilt man eine doppelt erscheinende Zeichenfolge?

NAME 
------------- 
sumansuman 
nehaneha 
anjalianjali 

ich so ausgegeben werden soll:

NAME 
------------- 
suman 
neha 
anjali 
+0

http://stackoverflow.com/questions/20882509/sql- server-2000-remove-duplicates-from-comma-separated-string – mohan111

Antwort

5

Wenn Sie sicher sind, dass jeder Name genau dupliziert dann sollte diese Arbeit

SELECT LEFT(name, LEN(name)/2) FROM temp 

Reihen zu fangen, wo dies nicht der Fall ist:

SELECT name FROM temp 
WHERE NOT name = LEFT(name, LEN(name)/2) + LEFT(name, LEN(name)/2) 
+0

vielen dank. Es ist sehr hilfreich – suman

1

versuchen so etwas wie dieses,

DECLARE @MyTable TABLE(NAME VARCHAR(100)) 

INSERT INTO @MyTable 
VALUES 
    ('sumansuman') 
    ,('nehaneha') 
    ,('anjalianjali') 
    ,('suman') 
    ,('nehaanjali') 

SELECT CASE WHEN SUBSTRING(NAME,1,len(NAME)/2) = SUBSTRING(NAME,(len(NAME)/2)+1,len(NAME)) 
       THEN SUBSTRING(NAME,1,len(NAME)/2) 
      ELSE NAME 
     END 
FROM @MyTable 

das Ergebnis:

Output 
------ 
suman 
neha 
anjali 
suman 
nehaanjali 
+0

danke für die Antwort. es ist sehr hilfreich – suman

+0

@sumar, wenn Sie denken, dies ist die Lösung für Sie Frage, bitte markieren Sie es als Antwort, so dass es für andere nützlich sein kann. –

1

Verwenden Sie einen CTE die Abfrage, um sowohl effizienter (nur durchführen LEFT und LEN einmal pro Zeile) und lesbarer:

with CTE as (
    select name, LEFT(name, LEN(name)/2) half from temp 
) 
select case name when half + half then half 
    else name end as name 
from CTE 

Wenn Sie nur die verdoppelten Namen behoben:

with CTE as (
    select name, LEFT(name, LEN(name)/2) half from temp 
) 
select half as name 
from CTE 
where name + half + half 
0

Sie Linke & Rechts Funktion verwenden können, um die Logik lesbar zu machen:

DECLARE @MyTable TABLE(NAME VARCHAR(100)) 

INSERT INTO @MyTable 
VALUES 
    ('sumansuman') 
    ,('nehaneha') 
    ,('anjalianjali') 
    ,('suman') 
    ,('nehaanjali') 

SELECT Case 
     when Left(NAME,len(NAME)/2) = Right(NAME,len(NAME)/2) 
     then Left(NAME,len(NAME)/2) 
     else NAME 
     end 
FROM @MyTable 
Verwandte Themen