检索值中两个句点之间的文本
Retrieve text between two periods in a value
我一直在思考如何在 SQL DW 中实现这一点。我需要提取 returned 值中两个句点之间的文本。所以我的结果值 returned 是:
我正在尝试提取周期 1 和周期 2 之间的值,所以上面的红色部分:
值的长度范围很广。
我有这个代码:
substring(Result,charindex('.',Result)+1,3) as ResultMid
结果是:
我的问题是我不确定如何达到 return 的可变长度,以便我可以在两个周期之间提取完整值。有人会碰巧知道我如何做到这一点吗?
谢谢,
乔
我们可以在您当前的尝试的基础上继续努力:
substring(
result,
charindex('.', result) + 1,
charindex('.', result, charindex('.', result) + 1) - charindex('.', result) - 1
)
理由:您已经正确地掌握了 substring()
的前两个参数。第三个参数定义要捕获的字符数。为此,我们计算 下一个 点 (.
) 的位置,表达式为:charindex('.', result, charindex('.', result) + 1)
。然后我们从该值中减去第一个点的位置,得到我们应该捕获的字符数。
result | result_mid
:----------------------- | :---------
sam.pdc.sys.paas.l.com | pdc
sm.ridl.sys.paas.m.com | ridl
s.sandbox.sys.paas.g.com | sandbox
如果您要处理字符串的每个分隔部分最多 128 个字符,请尝试 parsename
,如下所示。否则,GMB 在那里有一个非常可靠的解决方案。
select *, parsename(left(result,charindex('.',result,charindex('.',result)+1)-1),1) as mid
from your_table;
另一种方法,您可以轻松修改以使用 cross apply
提取字符串的第 3、4...(希望不要太远)部分。
select result, mid
from your_table t1
cross apply (select charindex('.',result) as i1) t2
cross apply (select charindex('.',result,(i1 + 1)) as i2) t3
cross apply (select substring(result,(i1+1),(i2-i1-1)) as mid) t4;
我一直在思考如何在 SQL DW 中实现这一点。我需要提取 returned 值中两个句点之间的文本。所以我的结果值 returned 是:
我正在尝试提取周期 1 和周期 2 之间的值,所以上面的红色部分:
值的长度范围很广。
我有这个代码:
substring(Result,charindex('.',Result)+1,3) as ResultMid
结果是:
我的问题是我不确定如何达到 return 的可变长度,以便我可以在两个周期之间提取完整值。有人会碰巧知道我如何做到这一点吗?
谢谢, 乔
我们可以在您当前的尝试的基础上继续努力:
substring(
result,
charindex('.', result) + 1,
charindex('.', result, charindex('.', result) + 1) - charindex('.', result) - 1
)
理由:您已经正确地掌握了 substring()
的前两个参数。第三个参数定义要捕获的字符数。为此,我们计算 下一个 点 (.
) 的位置,表达式为:charindex('.', result, charindex('.', result) + 1)
。然后我们从该值中减去第一个点的位置,得到我们应该捕获的字符数。
result | result_mid :----------------------- | :--------- sam.pdc.sys.paas.l.com | pdc sm.ridl.sys.paas.m.com | ridl s.sandbox.sys.paas.g.com | sandbox
如果您要处理字符串的每个分隔部分最多 128 个字符,请尝试 parsename
,如下所示。否则,GMB 在那里有一个非常可靠的解决方案。
select *, parsename(left(result,charindex('.',result,charindex('.',result)+1)-1),1) as mid
from your_table;
另一种方法,您可以轻松修改以使用 cross apply
提取字符串的第 3、4...(希望不要太远)部分。
select result, mid
from your_table t1
cross apply (select charindex('.',result) as i1) t2
cross apply (select charindex('.',result,(i1 + 1)) as i2) t3
cross apply (select substring(result,(i1+1),(i2-i1-1)) as mid) t4;