尝试在SQL Server中获取字符串左侧的所有文本
我创建了一个函数,它返回一些值,并使用STUFF将它们全部放在一列中 部分结果包括:尝试在SQL Server中获取字符串左侧的所有文本,sql,sql-server,Sql,Sql Server,我创建了一个函数,它返回一些值,并使用STUFF将它们全部放在一列中 部分结果包括: Something, something else, ?<?xml version="1.0" ... and lots of stuff in here. /> Something,Something? 我想弄清楚的是如何删除整个: <?xml /> tag and all of its inner content. 标记及其所有内部内容。 问题是,有时它会以每行结果的不同部分
Something, something else, ?<?xml version="1.0" ... and lots of stuff in here. />
Something,Something?
我想弄清楚的是如何删除整个:
<?xml /> tag and all of its inner content.
标记及其所有内部内容。
问题是,有时它会以每行结果的不同部分结束
所以我试过CHARINDEX,左,Splits
有什么想法吗
多谢各位
DECLARE @String NVARCHAR(1000)
SET @String = 'Something, something else, ?<?xml version="1.0" ......... />'
SELECT LEFT(@String,CHARINDEX('<?xml',@String)-1) Val
更新
好吧,新的需求是棘手的,真正困难的部分是确定XML标记的确切结尾。假设存在一个非常简单的场景,其中只有一个XML标记,并且字符串中没有先前的/>
,则可以执行以下操作:
DECLARE @String NVARCHAR(1000)
SET @String = 'Something, something else, ?<?xml version="1.0" ......... /> hello'
SELECT STUFF(@String,CHARINDEX('<?xml',@String),CHARINDEX('/>',@String)-CHARINDEX('<?xml',@String)+2,'') Val
声明@string varchar(MAX)=“某物,某物,某物”
声明@StartOfXml INT=PATINDEX(“%%”,@string)
挑选
子字符串(@string,0,@StartOfXml)+
子字符串(@string,@EndOfXml+2,LEN(@string))
或者将其全部内联:
DECLARE @string varchar(MAX) = 'Something, something else, ?<?xml version="1.0" ... and lots of stuff in here. />, something else yet'
SELECT
SUBSTRING(@string, 0, PATINDEX('%<?xml%', @string)) +
SUBSTRING(@string, PATINDEX('%/>%', @string) + 2, LEN(@string))
声明@string varchar(MAX)=“某物,某物,某物”
挑选
子字符串(@string,0,PATINDEX('%%',@string)+2,LEN(@string))
到目前为止给出的这个或其他答案的问题是,根据您的XML,字符串中可能有多个“/>”。在这种情况下,您可以执行以下操作:
DECLARE @string varchar(MAX) = 'Something, something else, ?<?xml version="1.0" ... and lots of stuff in here. />, something else yet'
SELECT SUBSTRING(@string, 0, PATINDEX('%<?xml%', @string)) +
SUBSTRING(@string, (LEN(@string) - PATINDEX('%>/%', REVERSE(@string))) + 2, LEN(@string))
声明@string varchar(MAX)=“某物,某物,某物”
选择子字符串(@string,0,PATINDEX(“%/%”,REVERSE(@string))+2,LEN(@string))
最后一个解决方案假定XML的最后一个结束标记是字符串“/>”的最后一次出现。希望这些帮助之一 多谢各位。我可以这样做,但问题是一些结果在xml标记之后包含重要信息。@user1447679现在更新了我的答案。您可以在一个字段中有多个子字符串吗?您可以让
没有/b匹配的code/>吗?
DECLARE @string varchar(MAX) = 'Something, something else, ?<?xml version="1.0" ... and lots of stuff in here. />, something else yet'
DECLARE @StartOfXml INT = PATINDEX('%<?xml%', @string)
DECLARE @EndOfXml INT = PATINDEX('%/>%', @string)
SELECT
SUBSTRING(@string, 0, @StartOfXml) +
SUBSTRING(@string, @EndOfXml + 2, LEN(@string))
DECLARE @string varchar(MAX) = 'Something, something else, ?<?xml version="1.0" ... and lots of stuff in here. />, something else yet'
SELECT
SUBSTRING(@string, 0, PATINDEX('%<?xml%', @string)) +
SUBSTRING(@string, PATINDEX('%/>%', @string) + 2, LEN(@string))
DECLARE @string varchar(MAX) = 'Something, something else, ?<?xml version="1.0" ... and lots of stuff in here. />, something else yet'
SELECT SUBSTRING(@string, 0, PATINDEX('%<?xml%', @string)) +
SUBSTRING(@string, (LEN(@string) - PATINDEX('%>/%', REVERSE(@string))) + 2, LEN(@string))