0

这类似于关于 如何从数据末尾删除句号的问题

但在这种情况下,数据字段可以是这样的

我的瓦尔

 abcd.          ->>expected   abcd
 abcd..                       abcd
 abcd .                       abcd 
 abcd ..                      abcd
 ab.abb...                    ab.abb

ETC....

我可以做类似的事情

Select case when like '%.' then substring(MyVal ,1,len(MyVal )-1)
       case when like '%..' then substring(MyVal ,1,len(MyVal )-2)

通过匹配每种类型的模式。由于这是手动方式,我正在寻找一种可以删除值字段之后可能出现的任意数量的句号的通用方式。

谢谢

4

5 回答 5

5
select substring(MyVal, 1, len(MyVal)+1-patindex('%[^.]%', reverse(MyVal)))

更新:
如果你也想删除空格,你可以使用它来代替。

select substring(MyVal, 1, len(MyVal)+1-patindex('%[^. ]%', reverse(MyVal)))

SE-数据

于 2012-04-26T09:32:58.377 回答
1

如果不使用 T-SQL,我不确定这是否可行:

DECLARE @Example varchar(max) = 'Hello, Dave....'

SET @Example = LTRIM(RTRIM(@Example))

WHILE SUBSTRING(REVERSE(@Example), 0, 2) = '.'
BEGIN
    SET @Example = SUBSTRING(@Example, 0, LEN(@Example) - 1)
END

SELECT @Example
于 2012-04-26T09:30:01.030 回答
0

您可以创建一个函数,如

Create FUNCTION [dbo].[fn_RemoveFullStopsFromEnd] (@Input varchar(255))
Returns varchar(255)
AS
BEGIN
    DECLARE @Output VARCHAR(255) 
    SELECT @OutPut = @Input

    While (Len(@Output) > 0) and (SUBSTRING(@Output,Len(@Output),1) = '.')
    Begin
       SELECT @Output = substring(@Output ,1,len(@Output )-1)
    End
    RETURN @Output
END

用法

 select dbo.fn_RemoveFullStopsFromEnd('abcd..') 

如果您想从末尾删除空格和句号,可以轻松修改。

于 2012-04-26T09:52:31.270 回答
0

您可以尝试这种方法:

DECLARE @t TABLE(somestrings VARCHAR(20))
INSERT INTO @t VALUES('abcd.')
, ('abcd..')
, ('abcd .')
, ('abcd ..')
, ('ab.abb...');
SELECT somestrings=LEFT(somestrings,LEN(RTRIM(REPLACE(somestrings,'.', ' ')))) FROM @t;

结果:

somestrings
--------------------
abcd
abcd
abcd
abcd
ab.abb
于 2012-04-26T12:04:28.813 回答
0

这应该有效:

SELECT CASE WHEN CHARINDEX('.', MyVal) > 0 
        THEN RTRIM(LEFT(MyVal, CHARINDEX('.', MyVal) - 1))
        ELSE MyVal 
       END  As NewValue
FROM Table

经测试:

declare @t1 table(MyVal varchar(20));
insert into @t1 values('abcd.');
insert into @t1 values('abcd..');
insert into @t1 values('abcd .');
insert into @t1 values('abcd ..');
insert into @t1 values('abcd   . ..');
insert into @t1 values('abcd... . ..');

SELECT   MyVal As FullStopVal
      ,  CASE WHEN CHARINDEX('.', MyVal) > 0 
          THEN RTRIM(LEFT(MyVal, CHARINDEX('.', MyVal) - 1))
          ELSE MyVal  END  As NewValue
FROM @t1 

编辑:我的方法不喜欢 @MikaelEriksson 已经指出的值中间的点,但它适用于像

abcd   . .. 
abcd       ... . ..
abcd... . ..

不像他的:)

于 2012-04-26T09:29:26.037 回答