如何在SQL中选择两个相同字符之间的字符串

4

我的初始字符串是

Content-Disposition: attachment; filename="0001.zam"

我希望选择两个“字符”之间的所有内容(在这种情况下是“0001.zam”)。我知道我需要使用SUBSTRING和CHARINDEX函数,类似于:

SELECT SUBSTRING(@Attachment, CHARINDEX('"', @Attachment),...)

我不知道要作为第二个SUBSTRING参数传递什么。请注意,两个“”字符之间的字符串和第二个“”字符后面的字符串都是可变的。整个字符串可能像这样:

Content-Disposition: attachment; filename="0001556.txt"; size=187;

底线是获取两个引号之间的所有内容。
2个回答

7

获取你需要的数据的另一种方法是使用 left()right() 函数。

select left(right(t, len(t)- CHARINDEX('"', t)), charindex('"',right(t, len(t)- CHARINDEX('"', t)))-1)
from
(
select 'Content-Disposition: attachment; filename="0001.zam"' t
) u

这将输出: 0001.zam 我希望,而不是假设,在这个标题中只有两个引号。

谢谢。是的,在整个字符串中只会有两个 " 字符。 - DanteeChaos

2

使用SUBSTRING的解决方案,这是你一开始尝试的:

SELECT SUBSTRING(@Attachment,
                 CHARINDEX('"', @Attachment)+1,
                 CHARINDEX('"', @Attachment,CHARINDEX('"', @Attachment)+1)-CHARINDEX('"', @Attachment)-1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接