2014-10-30 22 views
5

Tôi đang làm việc với máy chủ SQL 2008 và gặp sự cố về thay thế ký tự.Thay thế ký tự cuối cùng trong SQL Server 2008

Nếu tôi sử dụng

SELECT REPLACE(MYWORD,0,1) FROM MYTABLE 

Nó được thay thế tất cả 0 thành 1, tôi chỉ muốn thay thế nhân vật cuối Giống như MYWORD = "ERMN0" vì vậy nó sẽ được MYWORD = "ERMN1"

Trả lời

6

sử dụng STUFF, trong đó, IMO, kết thúc lên được dễ đọc nhất:

DECLARE @MyWORD VARCHAR(20) = 'ABCDEF123' 

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

đầu ra:

ABCDEF122 
1

Hãy thử điều này.

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

OUTPUT: ERMN1

Trong trường hợp của bạn

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

này sẽ làm việc

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

Hoặc trong trường hợp của bạn

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

Hãy thử điều này

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

Bạn có thể sử dụng sự kết hợp của LEFT, RIGHT, và CASE.
Bạn cần sử dụng CASE để kiểm tra nhiều nhất RIGHT ký tự cho dù đó là 0 hay không và thay thế bằng 1. Và cuối cùng, kết hợp nó với phần LEFT (sau khi được tách ra khỏi ký tự cuối cùng) của chuỗi MYWORD.

Tuy nhiên, tùy thuộc vào yêu cầu của bạn, nó có thể có một nhược điểm. Khi có từ kết thúc bằng 10, nó cũng sẽ được thay thế.

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

này cũng được sử dụng đầy đủ để thay thế chữ từ cuối

Nó được sử dụng để thay thế các ký tự từ cuối 1,2 hoặc N

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

ra là "Bollywoas"

  • đây nhất một phần là bạn có thể repalce như nhiều nhân vật từ cuối cùng bạn cần.
Các vấn đề liên quan