2016-09-09 4 views
2

У меня есть таблица с именем table1, содержащая:Сравнить и обновить два символа в строке

col1 
a.b 

1.1 
2.2 
3.3 
1.3 
2.3 

enter image description here

Я хочу, чтобы сравнить левый символ точки (а) с правым характером точки (б) , а если a = b, удалите .b.

Так table1 должен быть изменен следующим образом:

col1 
a.b 

1 
2 
3 
1.3 
2.3 

enter image description here

+1

попытку разделить седловины первый (http://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-to- столбцы), а затем сравнить их – Prisoner

ответ

2

Попробуйте это:

DECLARE @tbl1 as TABLE(
    Id INT, 
    col1 VARCHAR(20) 
) 

INSERT INTO @tbl1 VALUES(1,'1.1') 
INSERT INTO @tbl1 VALUES(2,'2.2') 
INSERT INTO @tbl1 VALUES(3,'3.3') 
INSERT INTO @tbl1 VALUES(4,'1.3') 
INSERT INTO @tbl1 VALUES(5,'1.4') 

SELECT 
    Id, 
    CASE WHEN SUBSTRING(col1,0,CHARINDEX('.',col1))=SUBSTRING(col1,CHARINDEX('.',col1)+1,len(col1)) 
    THEN SUBSTRING(col1,0,CHARINDEX('.',col1)) 
    ELSE col1 
    END 
FROM 
@tbl1 

UPDATE:

UPDATE @tbl1 
    SET col1=SUBSTRING(col1,0,CHARINDEX('.',col1)) 
WHERE SUBSTRING(col1,0,CHARINDEX('.',col1))=SUBSTRING(col1,CHARINDEX('.',col1)+1,len(col1)) 
0

я написал бы update как:

with toupdate as (
     select t1.*, 
      left(t1.col1, charindex('.', t1.col1 + '.') - 1) as firstpart 
     from table1 t1 
    ) 
update toupdate 
    set col1 = firstpart 
    where col1 = firstpart + '.' + firstpart; 
Смежные вопросы