2016-07-13 14 views
8

Tôi có một tạm thời bảng với columnname NAME và dữ liệu như thế này:Cách tách một chuỗi xuất hiện hai lần?

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

Tôi muốn đầu ra như thế này:

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

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

Trả lời

5

Nếu bạn chắc chắn rằng mỗi tên được nhân đôi chính xác thì đây nên làm việc

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

Để bắt các hàng không có trường hợp:

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

cảm ơn bạn rất nhiều. Nó rất hữu ích – suman

1

thử một cái gì đó như thế này,

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 

kết quả là:

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

cảm ơn cho câu trả lời. nó rất hữu ích – suman

+0

@sumar, nếu bạn nghĩ đây là giải pháp cho câu hỏi của bạn, hãy đánh dấu nó là câu trả lời để nó có thể hữu ích cho người khác. –

1

Sử dụng một CTE để làm cho truy vấn cả hai hiệu quả hơn (chỉ thực hiện LEFT và LEN một lần cho mỗi hàng) và dễ đọc hơn:

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 

Nếu bạn muốn chỉ tên gấp đôi sửa chữa:

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

Bạn có thể sử dụng Left & Ngay chức năng Để thực hiện logic có thể đọc được:

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 
Các vấn đề liên quan