如果字符串总是从第 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 中的字符串函数不如其他语言强大。但有时有必要拼凑这样的解决方案。