当一个特定字符的数量为两个或更多时,我正在尝试执行SQL替换,但是最重要的是,我需要替换除最后一个字符以外的所有字符。
因此,假设我有这个字符串1.235.36
,而我正在尝试删除第一个小数并保留最后一个小数。
我想将1.235.36变成1235.36。
我这里有count方法,但是我在想一种不用替换所有小数的替换方法就很麻烦。
declare @myvar varchar(20)
set @myvar = '1.234.54'
select len(@myvar) - len(replace(@myvar,'.',''))
更新:我不想替换所有内容,但保留最后一个。我正在使用SQL Server
答案 0 :(得分:0)
您可以使用[1] "select * from my_table"
,axios.interceptors.response.use(
function(response) {
return response;
},
function(error) {
if (error.response.status == 401) {
self.$toaster.error("ERROR: Invalid token detected");
self.logout();
}
throw new Error('Invalid token detected')
}
);
}
和reverse
函数进行此操作。它将删除除小数点分隔符之外的所有点。
charindex
或更短的版本:
substring
答案 1 :(得分:0)
另一种方法,如果您抓取NGrams8K的副本,则可以这样做:
DECLARE @string VARCHAR(1000) = '1.235.36';
SELECT COALESCE(
REPLACE(SUBSTRING(@string, 1, MAX(ng.position)),'.','') +
SUBSTRING(@string, MAX(ng.position), 8000),@string)
FROM dbo.ngrams8k(@string,1) AS ng
WHERE ng.token = '.'
AND LEN(@string) - LEN(REPLACE(@string,'.','')) > 1;
针对表格,它看起来像这样:
DECLARE @table TABLE (string VARCHAR(1000));
INSERT @table(string)
VALUES('123.123.123'),('999.00'),('12345');
SELECT t.string, f.newstring
FROM @table AS t
CROSS APPLY
(
SELECT COALESCE(
REPLACE(SUBSTRING(t.string, 1, MAX(ng.position)),'.','') +
SUBSTRING(t.string, MAX(ng.position), 8000),t.string)
FROM dbo.ngrams8k(t.string,1) AS ng
WHERE ng.token = '.'
AND LEN(t.string) - LEN(REPLACE(t.string,'.','')) > 1
) AS f(newstring)
结果:
string newstring
------------ -------------
123.123.123 123123.123
999.00 999.00
12345 12345