Удалить первую и последнюю точку из строки, если существует - PullRequest
0 голосов
/ 14 ноября 2018

Я хочу удалить точку из начала и конца строки, если она существует без использования CASE и LIKE.

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;      

Примечание. Причина, по которой не используются CASE и LIKE, заключается в том, что я использую несколько функций replace и trim для @str.

Ожидаемый результат :

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

Ответы [ 4 ]

0 голосов
/ 14 ноября 2018
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
0 голосов
/ 14 ноября 2018

Это удалит первую и последнюю точку:

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
0 голосов
/ 14 ноября 2018

Использование функций SUBSTRING и LENGTH:

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)
0 голосов
/ 14 ноября 2018

Возможно ...

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...