我在Sql中有一个像下面这样的变量
DECLARE @MyVariable AS VARCHAR(50) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa'
当我打印@MyVariable
print(@MyVariable)
输出如下所示
我的名字。是易卜拉欣。和。我是。正在搜寻。一个办法。 aa
这很好,但是现在我想删除除最后一个点之外的所有点
我的预期输出如下所示
输出如下所示
我的名字叫易卜拉欣,我正在寻找解决方案。 aa
我怎么能做到这一点,我用google却找不到任何东西
答案 0 :(得分:1)
还有另一个(简单的恕我直言)选项:
DECLARE @MyVariable AS VARCHAR(100) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa';
SELECT REPLACE(
LEFT(@MyVariable, LEN(@MyVariable) - CHARINDEX('.', REVERSE(@MyVariable)))
, '.', '') +
RIGHT(@MyVariable, CHARINDEX('.', REVERSE(@MyVariable)))
您将替换字符串中最后一个点之前的所有点,并将其连接到字符串中从最后一个点到末尾的那一部分。
刹车:
CHARINDEX('.', REVERSE(@MyVariable))
为您提供最后一个点的索引。LEFT(@MyVariable, LEN(@MyVariable) - CHARINDEX('.', REVERSE(@MyVariable)))
为您提供字符串的最后一个点(包括最后一个点)的部分。REPLACE(LEFT(@MyVariable, LEN(@MyVariable) - CHARINDEX('.', REVERSE(@MyVariable))), '.', '')
为您提供了字符串中没有点的那一部分。RIGHT(@MyVariable, CHARINDEX('.', REVERSE(@MyVariable)))
为您提供字符串的最后一部分,包括最后一个点。如果您的字符串不包含任何点,它将仅返回相同的字符串。
答案 1 :(得分:0)
如果.
字符始终位于结尾,则很简单:
SELECT REPLACE(@MyVariable,'.','') + '.';
只需删除 all 个.
字符,然后在末尾添加一个。
编辑:使用正确的注释,您需要执行以下操作:
DECLARE @MyVariable AS VARCHAR(50) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa';
SELECT REPLACE(LEFT(V.MyString, LEN(MyString) - (CI.I - 1)),'.','') + RIGHT(V.MyString,CI.I)
FROM (VALUES(@MyVariable),('This.is.a.string'))V(MyString)
CROSS APPLY (VALUES(NULLIF(CHARINDEX('.',REVERSE(V.MyString)),1)))CI(I);
请注意,对于您的示例字符串,返回值为'My Name Is Ibrahim AND I am Searching For A. '
;因为初始字符串超过50个字符,因此被截断了。
答案 2 :(得分:0)
这是一个仅使用字符串操作的选项。
DECLARE
@MyVariable VARCHAR(100) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa'
,@FixFor CHAR(1) = '.'
,@LastHit INT
首先,找到目标字符最后一次出现的位置:
SET @LastHit = len(@MyVariable) - charindex(@FixFor, reverse(@MyVariable)) + 1
使用该值,我们可以进行一些尴尬的字符串操作:
PRINT replace(left(@MyVariable, @LastHit - 1), @FixFor, '') + substring(@MyVariable, @LastHit, 100)
这可以变成一条语句,但是如果您这样做,以后必须使用您的代码的任何人都会讨厌您:
PRINT replace(left(@MyVariable, len(@MyVariable) - charindex(@FixFor, reverse(@MyVariable))), @FixFor, '') + substring(@MyVariable, len(@MyVariable) - charindex(@FixFor, reverse(@MyVariable)) + 1, 100)
您将注意到T-SQL并不是用于字符串操作的好语言。尽可能将格式留给前端应用程序,这会做得很好。
答案 3 :(得分:0)
只需三步,您就可以实现所需的结果。 第一个变量找到最后一个点的位置, 第二个变量删除除最后一个变量以外的点, 第三个变量在最后一个点之后找到字符串, 并串联了两个变量以获得所需的输出。
DECLARE @MyVariable AS VARCHAR(100) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa'
DECLARE @FirstDot as int =LEN(@MyVariable)-PATINDEX('%.%',REVERSE(@MyVariable))
DECLARE @RemoveDotsBeforeLastDot as varchar(100) = REPLACE(SUBSTRING(@MyVariable,1,@FirstDot),'.',' ')
DECLARE @AfterLastDot as varchar(100) = SUBSTRING(@MyVariable,@FirstDot+1,LEN(@MyVariable))
select CONCAT(@RemoveDotsBeforeLastDot,@AfterLastDot)