如果存在,从字符串中删除第一个和最后一个点
Remove first and last dot from string if exists
如果不使用 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
的原因是我在 @str
上使用多个 replace
和 trim
函数。
预期结果:
String1 String2 String3 String4
--------------------------------------------
SQL Server SQL. Server SQL Server SQL Server
也许……
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);
这将删除第一个和最后一个点:
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
使用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)
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
如果不使用 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
的原因是我在 @str
上使用多个 replace
和 trim
函数。
预期结果:
String1 String2 String3 String4
--------------------------------------------
SQL Server SQL. Server SQL Server SQL Server
也许……
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);
这将删除第一个和最后一个点:
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
使用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)
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