2014-10-30 18 views
5

Pracuję z serwerem SQL 2008 i napotykałem problem dotyczący zastępowania znaków.Zamień ostatni znak w SQL Server 2008

Jeśli używam

SELECT REPLACE(MYWORD,0,1) FROM MYTABLE 

jest zastąpienie wszystkich 0 do 1, po prostu chcę, aby zastąpić ostatni znak Podoba MYWORD = "ERMN0" tak będzie MYWORD = "ERMN1"

Odpowiedz

6

użyciu STUFF, który, IMO, kończy się najbardziej czytelny:

DECLARE @MyWORD VARCHAR(20) = 'ABCDEF123' 

SELECT STUFF(@MyWORD, LEN(@MyWORD), 1, '2') 

wyjściowa:

ABCDEF122 
1

Spróbuj tego.

SELECT LEFT('ERMN0', Len('ERMN0')-1) 
     + Replace(RIGHT('ERMN0', 1), 0, 1) 

WYJŚCIE: ERMN1

W twoim przypadku

SELECT LEFT(MYWORD, Len(MYWORD)-1) 
     + Replace(RIGHT(MYWORD, 1), 0, 1) as [REPLACED] FROM MYTABLE 
1

To zadziała

SELECT LEFT ('ERMN0' , Len('ERMN0') -1) + REPLACE(Right('ERMN0', 1), '0','1') 

lub w przypadku

SELECT LEFT (MYWORD , Len(MYWORD) -1) + REPLACE(Right(MYWORD, 1), '0','1') AS MYWORD FROM MYTABLE 
1

Spróbuj

SELECT SUBSTRING(MYWORD, 1, LEN(MYWORD) - 1) + 
REPLACE(SUBSTRING(MYWORD, LEN(MYWORD), LEN(MYWORD)), 0, 1) FROM MYTABLE 
2

Można użyć kombinacji LEFT, RIGHT i CASE.
Musisz użyć znaku CASE, aby sprawdzić, czy jest to znak niezależnie od tego, czy jest to znak 0, czy nie i zastąp go numerem 1. I na koniec połącz go z częścią LEFT (po oddzieleniu od ostatniego znaku) ciągu MYWORD.

Jednak w zależności od wymagań może mieć tę wadę. Gdy pojawi się słowo kończące się na 10, zostanie również zastąpione.

SELECT LEFT(MYWORD,LEN(MYWORD)-1) + CASE RIGHT(MYWORD,1) WHEN '0' THEN '1' ELSE RIGHT(MYWORD,1) END 
1

to również użyć pełnego zastąpienia litery od końca

Jest używany do zastępowania znaków z końca 1,2 lub N

Declare @Name nvarchar(20) = 'Bollywood' 
select @Name = REPLACE(@Name, SUBSTRING(@Name, len(@Name) - 1, 2), 'as') 
SELECT @Name 

wyjście jest „Bollywoas”

  • Oto najlepsze jest to, można repalce tyle charakteru z ostatnim potrzebne.
Powiązane problemy