如何在SQL SERVER中的字符串中替换x和y char之间的字符。 例如,如果我有:TEST123456到最后TE ****** 56。我不知道字符串有多长,但我知道我需要在字符串
中屏蔽x和y之间的字符答案 0 :(得分:4)
您可以使用REPLICATE()
和STUFF()
执行此操作:
DECLARE @String VARCHAR(20)='TEST123456',
@Start INT = 3,
@End INT = 5;
SELECT
@String AS MyString,
STUFF(@String, @Start, @End - @Start, REPLICATE('*', @End - @Start)) AS Mask;
当你说“我不知道字符串会有多长时间”时,REPLICATE()
函数会返回“{1}}和{{”的星号“*” {1}}你提供。
答案 1 :(得分:1)
您可以尝试这样的事情
git diff <source_branch> <target_branch> -- file_path
输出
DECLARE @Str VARCHAR(20)='TEST123456',
@x INT = 3,
@Y INT = 9
SELECT
MyString = @Str,
Mask = STUFF(@Str,@x,@Y-@x,'********')
答案 2 :(得分:1)
使用STUFF
,REPLICATE
和CHARINDEX
的组合。
DECLARE @string VARCHAR(20) = 'TEST123456'
DECLARE @maskStart CHAR = 'S'
DECLARE @maskEnd CHAR = '4'
SELECT
Original = @string,
MaskStartIndex = CHARINDEX(@maskStart, @string),
MaskEndIndex = CHARINDEX(@maskEnd, @string),
MaskToSet = REPLICATE('*', CHARINDEX(@maskEnd, @string) - CHARINDEX(@maskStart, @string)),
Replaced = STUFF(
@string,
CHARINDEX(@maskStart, @string),
CHARINDEX(@maskEnd, @string) - CHARINDEX(@maskStart, @string) + 1,
REPLICATE('*', CHARINDEX(@maskEnd, @string) - CHARINDEX(@maskStart, @string)))
WHERE
CHARINDEX(@maskStart, @string) > 0 AND
CHARINDEX(@maskEnd, @string) > CHARINDEX(@maskStart, @string)
CHARINDEX
将为您提供另一个字符串中的特定字符串的位置(默认情况下为第一个)。
REPLICATE
将重复N次字符串,我们将其用于掩码。
STUFF
将替换另一个字符串(原始字符串中的掩码),同时删除指定位置的N个字符。
答案 3 :(得分:0)
我的要求与帖子不同,在这里发布我的解决方案可能会帮助别人。
CREATE FUNCTION [dbo].[uf_MaskText] (@cText VARCHAR(255), @iNumberOfVisibleCharacters INT)
RETURNS VARCHAR(255)
AS
BEGIN
IF ISNULL(@cText, '') <> ''
BEGIN
IF LEN(@cText) > @iNumberOfVisibleCharacters
BEGIN
DECLARE @iNumberCharacters INT = LEN(@cText)
SET @cText = REPLICATE('*', @iNumberCharacters - @iNumberOfVisibleCharacters) + SUBSTRING(@cText, @iNumberCharacters - @iNumberOfVisibleCharacters + 1, @iNumberOfVisibleCharacters)
END
END
RETURN @cText
END
GO