2013-01-08 19 views
8

Jak zamienić pierwsze dwa znaki, jeśli są zera?Zastępowanie wiodących znaków w ciągu znaków

Przykład:

1. 00001 
2. 0
3. 02451 

Powinno być:

1. 11001 
2. 11123 
3. 02451 

EDIT: Zapomniałem wspomnieć muszę to w klauzuli select (w widoku) Thanx.

+1

Jaka jest zasada? Czy jest to po prostu "00" -> "11", czy coś bardziej złożonego (tj. Te same przykładowe dane można podać dla "jeśli pierwsze dwie cyfry są zerowe, zastępują je pierwszą pierwszą niezerową cyfrą")? –

+0

cóż ... w moim przypadku wiem, jak je zastąpić. Chcę tylko zastąpić, jeśli wartości mają dwa zera z przodu. Jeśli nie, nie jest wymagana wymiana. – no9

+0

Tak, ale * nie wiedzieliśmy *, co należy zastąpić. Większość ludzi zakładała w swoich odpowiedziach, że chodzi tylko o zastąpienie ich słowami "11", więc mogliby pisać i testować * swoje odpowiedzi na podstawie tego założenia. Ale jeśli istniała bardziej złożona zasada, nie wymyśliłeś tego. –

Odpowiedz

21
update YourTable 
set  col1 = '11' + substring(col1, 2, len(col1)-2) 
where col1 like '00%' 

W widoku, można zrobić to lubią:

select case 
     when col1 like '00%' then stuff(col1, 1, 2, '11') 
     else col1 
     end 
from  YourTable; 

Live example at SQL Fiddle.

+0

można to zrobić w select (w widoku) dla pewnej kolumny? – no9

9
declare @a varchar(10) 

select @a='01123' 

Select case when LEFT(@a,2)='00' then STUFF(@a,1,2,'11') else @a end 
+1

+1 miły użytek z rzeczy – Andomar

+0

dziękuję, ale chcę go użyć w widoku – no9

3

można również użyć metody lewy jak poniżej

select case When left(Name,2) = '00' Then stuff(Name, 1, 2, '11') 
    else Name 
    end 
from YourTable 
+0

dziękuję za anwser – no9