这可能真的很容易,但 T-SQL 远非我的强项。
我有一堆非常长的字符串,其中包含一个如下所示的段:
~GS^PO^007941230X^107996118^20130514^
我想从中提取 007941230X 。此子字符串的长度会有所不同,但格式始终为:
~xxxx^.....^xxxxx^~GS^PO^jjjjjjjj^xxx^xxxx^....~
有谁知道如何在 t-sql 中获取 j 的值的子字符串?
我试图以某种方式使用 patindex 但无法弄清楚。
这可能真的很容易,但 T-SQL 远非我的强项。
我有一堆非常长的字符串,其中包含一个如下所示的段:
~GS^PO^007941230X^107996118^20130514^
我想从中提取 007941230X 。此子字符串的长度会有所不同,但格式始终为:
~xxxx^.....^xxxxx^~GS^PO^jjjjjjjj^xxx^xxxx^....~
有谁知道如何在 t-sql 中获取 j 的值的子字符串?
我试图以某种方式使用 patindex 但无法弄清楚。
如果字符串总是从第 8 个位置开始,然后长度不同,你可以这样做:
with t as (
select '~GS^PO^007941230X^107996118^20130514^' as val
)
select substring(val, 8,
charindex('^', substring(val, 8, len(val)))-1
)
from t;
如果你不知道它从第 8 个字符开始,你可以通过计算值来做到这一点。这是一个带有子查询的示例:
with t as (
select '~GS^PO^007941230X^107996118^20130514^' as val
)
select substring(val, start,
charindex('^', substring(val, start, len(val)))-1
), start
from (select charindex('^', t.val,
charindex('^', t.val) +1
) + 1 as start, t.*
from t
) t
T-SQL 中的字符串函数不如其他语言强大。但有时有必要拼凑这样的解决方案。
这是一个工作示例
declare @var varchar(1000) = '~xxxx^.....^xxxxx^~GS^PO^jjjjjjjj^xxx^xxxx^....'
declare @start_position int, @end_position int
declare @temp_string varchar(100)
select @start_position = PATINDEX('%GS^PO^%', @var)
print @start_position
select @temp_string = SUBSTRING(@var, @start_position + 6, 10000)
print @temp_string
select @end_position = PATINDEX('%^%', @temp_string)
print @end_position
print substring(@temp_string, 1, @end_position -1)
20
jjjjjjjj^xxx^xxxx^....
9
jjjjjjjj
campid从给定的 URL获取:
declare @LinkUrl nvarchar(max)='http://example.com/campid=4546&custid=Objets',
@startPosition int,
@endPosition int,
@tempString nvarchar(max)
select @startPosition = PATINDEX('%campid=%', @LinkUrl)
select @tempString = SUBSTRING(@LinkUrl, @startPosition + 7, 10000)
select @endPosition = PATINDEX('%&custid%', @tempString)
select distinct substring(@tempString, 1, @endPosition -1)
输出: 4546