我想替换字符串中N位置的字符。这是我的疑问:
SELECT code FROM tablecodes
结果是3行:
AXGETYTRTFYZUFYZFFFDIZEG
GFYZUFYZFAXFCDIZAX
ZUFYZGEFYFAXFFIXZRA
我无法弄清楚如何用'A'替换每行上的最后一个'Z'字符。我希望结果看起来像这样:
AXGETYTRTFYZUFYZFFFDIAEG
GFYZUFYZFAXFCDIAAX
ZUFYZGEFYFAXFFIXARA
'Z'字符始终位于相同的位置(字符串的长度 - 3)
有什么建议吗? 感谢。
答案 0 :(得分:3)
使用Stuff功能
示例:
SELECT Stuff('AXGETYTRTFYZUFYZFFFDIZEG', Len('AXGETYTRTFYZUFYZFFFDIZEG') - 2, 1, 'A')
Select
查询应该像
Select Stuff(code, Len(code) - 2, 1, 'A')
答案 1 :(得分:1)
替换特定位置的任何字符都可以使用填充函数
SELECT STUFF('XYZABC', CHARINDEX('A', 'XYZABC'), 1, '#')
根据您的问题,这是解决方案。
DECLARE @stringTable AS TABLE(STRING VARCHAR(50))
INSERT INTO @stringTable
VALUES('AXGETYTRTFYZUFYZFFFDIZEG'),
('GFYZUFYZFAXFCDIZAX'),
('ZUFYZGEFYFAXFFIXZRA')
SELECT STRING AS [Old String],
STUFF(STRING, LEN(STRING) - CHARINDEX('Z', REVERSE(STRING))+1, 1, 'A') AS [New String]
FROM @stringTable
--------------------------------------------------------
| Old String | New String |
--------------------------------------------------------
| AXGETYTRTFYZUFYZFFFDIZEG | AXGETYTRTFYZUFYZFFFDIAEG |
| GFYZUFYZFAXFCDIZAX | GFYZUFYZFAXFCDIAAX |
| ZUFYZGEFYFAXFFIXZRA | ZUFYZGEFYFAXFFIXARA |
--------------------------------------------------------
答案 2 :(得分:0)
您可以通过以下几种方式实现目标:
http://sqlfiddle.com/#!6/af25d/2
select left(code, len(code)-3) + 'A' + right(code, 2)
from tableCodes
请注意,这并没有进行任何类型的验证,即字符串足够长以执行操作 - 所以要小心。
不确定你是否“总是”将Z作为字符串中第三个到最后一个字符,所以如果你需要在进行替换之前另外检查它,你可以这样做:
select
CASE WHEN SUBSTRING(code, len(code)-2, 1) = 'Z'
THEN left(code, len(code)-3) + 'A' + right(code, 2)
ELSE code
end AS code
from tableCodes