替换字符串中的特定字符

时间:2018-09-11 18:46:56

标签: sql-server tsql

当一个特定字符的数量为两个或更多时,我正在尝试执行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

2 个答案:

答案 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