【问题标题】:Remove first and last dot from string if exists如果存在,则从字符串中删除第一个和最后一个点
【发布时间】:2018-11-14 11:59:04
【问题描述】:

如果不使用CASELIKE,我想从字符串的开头和结尾删除点。

DECLARE @str1 varchar(max) = 'SQL Server.'
DECLARE @str2 varchar(max) = 'SQL. Server'
DECLARE @str3 varchar(max) = '.SQL Server.'
DECLARE @str4 varchar(max) = '.SQL Server'

查询:

SELECT CASE WHEN @str1 like '%.' THEN left(@str1, len(@str1) - 1) 
            ELSE @str1 
       END AS String1;      

注意:不使用CASELIKE 的原因是我在@str 上使用了多个replacetrim 函数。

预期结果

String1     String2     String3     String4 
--------------------------------------------
SQL Server  SQL. Server SQL Server  SQL Server     

【问题讨论】:

    标签: sql sql-server string sql-server-2008-r2


    【解决方案1】:

    这将删除第一个和最后一个点:

    DECLARE @t table(strx varchar(max))
    INSERT @t values('SQL Server.'),('SQL. Server'),('.SQL Server.'),('.SQL Server')
    
    SELECT 
      STUFF(
        SUBSTRING(strx, 1, LEN(strx) -CASE WHEN strx LIKE '%.' THEN 1 ELSE 0 END),
        1, CASE WHEN strx like '.%' THEN 1 ELSE 0 END, ''
      )
    FROM @t
    

    【讨论】:

      【解决方案2】:

      也许……

      SELECT @str = CASE RIGHT(V.str,1) WHEN '.' THEN STUFF(V.str,LEN(v.str),1,'') ELSE V.str END
      FROM (VALUES(CASE LEFT(@str,1) WHEN '.' THEN STUFF(@str,1,1,'') ELSE @str END)) V(str);
      

      【讨论】:

        【解决方案3】:

        使用SUBSTRINGLENGTH 函数:

        SELECT str, SUBSTRING(
            str,
            CASE WHEN LEFT(str, 1) = '.' THEN 2 ELSE 1 END,
            DATALENGTH(str) - CASE WHEN LEFT(str, 1) = '.' THEN 1 ELSE 0 END - CASE WHEN RIGHT(str, 1) = '.' THEN 1 ELSE 0 END
        )
        FROM (VALUES
            ('SQL Server.'),
            ('SQL. Server'),
            ('.SQL Server.'),
            ('.SQL Server')
        ) AS tests(str)
        

        【讨论】:

        • 我也在考虑使用 IIF,但在 2008 年不起作用
        • 出于兴趣,为什么是DATALENGTH 而不是LEN?是的,这是 varchar,但这不适用于 nvarchar
        • 如果我使用LEN,那么它将切断可能需要也可能不需要的尾随空格。
        【解决方案4】:
        DECLARE @str1 varchar(max) = 'SQL Server.'
        DECLARE @str2 varchar(max) = 'SQL. Server'
        DECLARE @str3 varchar(max) = '.SQL Server.'
        DECLARE @str4 varchar(max) = '.SQL Server'
        
        SELECT CASE WHEN @str1 LIKE '%.' OR @str1 LIKE '.%' THEN REPLACE(@str1, '.', '') ELSE @str1 END String1
            , CASE WHEN @str2 LIKE '%.' OR @str2 LIKE '.%' THEN REPLACE(@str2, '.', '') ELSE @str2 END String2
            , CASE WHEN @str3 LIKE '%.' OR @str3 LIKE '.%' THEN REPLACE(@str3, '.', '') ELSE @str3 END String3
            , CASE WHEN @str4 LIKE '%.' OR @str4 LIKE '.%' THEN REPLACE(@str4, '.', '') ELSE @str4 END String4
        

        【讨论】:

          猜你喜欢
          • 2011-04-11
          • 1970-01-01
          • 2022-11-01
          • 2013-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-14
          相关资源
          最近更新 更多