【发布时间】:2017-08-13 11:27:42
【问题描述】:
我在列中的字符串化 JSON 中有一个电子邮件地址。
我需要用其他电子邮件地址替换它。
我应该补充一点,我不能为此使用 CLR。那太容易了。
我会接受其他建议,但我想出的最佳方法是替换 @ 之前和之后的 "s 之间的所有内容。
DECLARE @testEmailAddress varchar(255);
SET @testEmailAddress = 'MyReplacementEmail@gmail.com';
UPDATE #TestEmails
SET
COMM_DATA =
STUFF (
COMM_DATA,
PATINDEX(
'%@%',
COMM_DATA
)
-
PATINDEX ('%"%',
REVERSE(
SUBSTRING(
COMM_DATA,
0,
PATINDEX(
'%@%',
COMM_DATA
)
)
)
) + 1,
PATINDEX(
'%@%',
COMM_DATA
)
+
PATINDEX ('%"%',
SUBSTRING(
COMM_DATA,
PATINDEX(
'%@%',
COMM_DATA
),
LEN(COMM_DATA)
)
) - 1,
@testEmailAddress
)
;
这几乎可行,只是替换电子邮件地址似乎超出了替换字符串几个字符。
例如
{"CustomerEmail":"original@test.com","property2":"value2","property3":"value3","property4":"value4","property5":"value5","property6":"value6","property7":"value7","property8":"value8"}
变成
{"CutomerEmail":"MyReplacementEmail@gmail.comproperty8":"value8"}
但我希望它是
{"CustomerEmail":"MyReplacementEmail@gmail.com","property2":"value2","property3":"value3","property4":"value4","property5":"value5","property6":"value6","property7":"value7","property8":"value8"}
【问题讨论】:
-
您的
'becomes'是错误的结果还是您想要的结果? -
@JuanCarlosOropeza 错误的结果。我会澄清并发布我的期望。
-
为什么在
"CustomerEmail":之后没有找到"的第一次出现? -
JSON 在记录间不一致。我可以肯定地说,只有一个电子邮件地址(并且只有一个
@),所以我将其作为搜索的起点。 -
但是有多少个
"CustomerEmail":?这是sql server?