如何只替换字符串的最后一个字符:
select REPLACE('this is the news with a þ', 'þ', '__')
我得到的结果是:
__is is __e news wi__ a __
修改
服务器和数据库的排序规则为Latin1_General_CI_AS
我正在运行的实际查询是REPLACE(note, 'þ', '')
,其中note
是ntext
列。重点是剥离刺字符,因为该字符后来在过程中用作列分隔符。 (请不要建议更改分隔符,考虑到它的使用程度,这不会发生!)
即使使用test select语句,我也尝试使用N
前缀,结果如下:
答案 0 :(得分:10)
þ字符(ASCII和UNICODE值254)被称为“刺”,在某些语言中直接等同于 :
此处字符和排序规则的说明:http://userguide.icu-project.org/collation/customization。搜索页面 - 通常是Control-F
- 用于“复杂裁缝示例”,您将看到以下内容:
字母'þ'(THORN)通常由UCA / root归类处理,作为单独的字母,在'z'之后进行初级排序。但是,在瑞典语和其他一些斯堪的纳维亚语言中,“þ”和“Þ”应分别被视为与“th”和“TH”字母的三级差异。
如果您不希望þ等同于 th ,请按以下方式强制进行二进制排序规则:
SELECT REPLACE(N'this is the news with a þ' COLLATE Latin1_General_100_BIN2,
N'þ', N'__');
返回:
this is the news with a __
答案 1 :(得分:0)
这可能对您有用:
DECLARE @text NVARCHAR(1000) = N'this is the news with a þ';
DECLARE @find NVARCHAR(1000) = N'þ';
DECLARE @replace NVARCHAR(1000) = N'_';
SELECT REPLACE(CAST(@text AS VARCHAR), CAST(@find AS VARCHAR), CAST(@replace AS VARCHAR));