我在Sql中有一个变量,如下所示
DECLARE @MyVariable AS VARCHAR(50) = 'My Name. Is Ibrahim. AND. I am. Searching For. A. Solution. aa'当我打印@MyVariable时
print(@MyVariable)输出如下
我的名字。是易卜拉欣。和。我是。在寻找。A.解决办法。aa
这很好,但是现在我想除去除最后一个点以外的所有点。
我的预期输出如下所示
输出如下
,我叫易卜拉欣,我正在寻找解决方案。aa
我如何做到这一点,我谷歌,但找不到任何东西。
发布于 2019-11-27 15:42:22
还有另一个(更简单的,IMHO)选择:
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))给出了最后一个dot.LEFT(@MyVariable, LEN(@MyVariable) - CHARINDEX('.', REVERSE(@MyVariable)))的索引,给出了到最后一个点为止的字符串的部分,(inclusive).REPLACE(LEFT(@MyVariable, LEN(@MyVariable) - CHARINDEX('.', REVERSE(@MyVariable))), '.', '')给出了字符串的这一部分,而没有dots.RIGHT(@MyVariable, CHARINDEX('.', REVERSE(@MyVariable)))给出了字符串的最后一部分,包括最后一个点。如果您的字符串不包含任何点,它只会返回相同的字符串。
发布于 2019-11-27 14:53:32
如果.字符总是在末尾,这很简单,如:
SELECT REPLACE(@MyVariable,'.','') + '.';只需删除所有.字符,然后在后面添加一个字符。
编辑:如果有正确的评论,您需要这样做:
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个字符,因此被截断。
发布于 2019-11-27 15:29:44
这里有一个只使用字符串操作的选项。
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)您将注意到,that不是一种很好的字符串操作语言。只要有可能,就把格式化留给前端应用程序,它做得很好。
https://stackoverflow.com/questions/59072809
复制相似问题