Sql server 使用LEFT()和SUBSTRING()从字符串中只提取这么多字符

Sql server 使用LEFT()和SUBSTRING()从字符串中只提取这么多字符,sql-server,substring,Sql Server,Substring,我正试图从我的数据库中的一个很长的XML字段中切出一部分精确的文本-我只希望文本从单词“General_Notes”开始,到“General_Notes_Conv”结束-我使用了这篇文章中的建议,在我的查询中使用了这一行: LEFT(SUBSTRING(PCO.Cycle_Order_Xml, CHARINDEX('General_Notes', PCO.Cycle_Order_Xml), 500), CHARINDEX

我正试图从我的数据库中的一个很长的XML字段中切出一部分精确的文本-我只希望文本从单词“General_Notes”开始,到“General_Notes_Conv”结束-我使用了这篇文章中的建议,在我的查询中使用了这一行:

LEFT(SUBSTRING(PCO.Cycle_Order_Xml,
                   CHARINDEX('General_Notes', PCO.Cycle_Order_Xml), 500),
                   CHARINDEX('General_Notes_Conv', PCO.Cycle_Order_Xml))
这是可行的,除了现在它从“一般注释”开始提取500个字符的文本-我觉得第二个
CHARINDEX
表示我只提取文本直到该单词出现-我不确定第二个
CHARINDEX
有什么用,但我希望它是动态的,只从
常规注释
拉到
常规注释
-我应该更改什么?

CHARINDEX()
获取指定的字符位置。你需要找出区别

DECLARE @String VARCHAR(200) = 'Some text you don''t care about General_Notes this is the data i want General_Notes_Conv more stuff I don''t care about'

SELECT LTRIM(RTRIM(SUBSTRING(@String, CHARINDEX('General_Notes', @String), 
                                      CHARINDEX('General_Notes_Conv', @String) 
                                         - CHARINDEX('General_Notes', @String))))
要仅获取之间的数据,只需进行一点添加

DECLARE @String VARCHAR(200) = 'Some text you don''t care about General_Notes this is the data i want General_Notes_Conv more stuff I don''t care about'

SELECT LTRIM(RTRIM(SUBSTRING(@String, CHARINDEX('General_Notes', @String) + 13, 
                                      CHARINDEX('General_Notes_Conv', @String) 
                                      - CHARINDEX('General_Notes', @String))))
要同时包含这两个标记,请执行以下操作:

DECLARE @String VARCHAR(200) = 'Some text you don''t care about <General_Notes> this is the data i want <General_Notes_Conv> more stuff I don''t care about'

SELECT LTRIM(RTRIM(SUBSTRING(@String, CHARINDEX('<General_Notes>', @String), 
                                      CHARINDEX('<General_Notes_Conv>', @String) 
                                         - CHARINDEX('<General_Notes>', @String) + 19)))
DECLARE@String VARCHAR(200)=“一些你不关心的文本这是我想要的数据,更多我不关心的东西”
选择LTRIM(RTRIM(子字符串(@String,CHARINDEX(“”,@String)),
CHARINDEX(“”,@String)
-CHARINDEX(“”,@String)+19)))
CHARINDEX()
获取指定的字符位置。你需要找出区别

DECLARE @String VARCHAR(200) = 'Some text you don''t care about General_Notes this is the data i want General_Notes_Conv more stuff I don''t care about'

SELECT LTRIM(RTRIM(SUBSTRING(@String, CHARINDEX('General_Notes', @String), 
                                      CHARINDEX('General_Notes_Conv', @String) 
                                         - CHARINDEX('General_Notes', @String))))
要仅获取之间的数据,只需进行一点添加

DECLARE @String VARCHAR(200) = 'Some text you don''t care about General_Notes this is the data i want General_Notes_Conv more stuff I don''t care about'

SELECT LTRIM(RTRIM(SUBSTRING(@String, CHARINDEX('General_Notes', @String) + 13, 
                                      CHARINDEX('General_Notes_Conv', @String) 
                                      - CHARINDEX('General_Notes', @String))))
要同时包含这两个标记,请执行以下操作:

DECLARE @String VARCHAR(200) = 'Some text you don''t care about <General_Notes> this is the data i want <General_Notes_Conv> more stuff I don''t care about'

SELECT LTRIM(RTRIM(SUBSTRING(@String, CHARINDEX('<General_Notes>', @String), 
                                      CHARINDEX('<General_Notes_Conv>', @String) 
                                         - CHARINDEX('<General_Notes>', @String) + 19)))
DECLARE@String VARCHAR(200)=“一些你不关心的文本这是我想要的数据,更多我不关心的东西”
选择LTRIM(RTRIM(子字符串(@String,CHARINDEX(“”,@String)),
CHARINDEX(“”,@String)
-CHARINDEX(“”,@String)+19)))

子字符串的工作原理类似于
子字符串(输入字符串、开始、长度)

Left的工作方式类似于
Left(输入字符串、字符数)

我想你只需要
子字符串

您可以通过从“General_Notes_Conv”的位置减去“General_Notes”的位置并调整开始标记(即“General_Notes”)的长度来查找
长度
,因为索引给出了字符串的开头


SUBSTRING(column\u name,CHARINDEX('General\u Notes',column\u name)+LEN('General\u Notes',column\u name')、CHARINDEX('General\u Notes',column\u name))
SUBSTRING的工作原理与
SUBSTRING(input\u string,start,length)

Left的工作方式类似于
Left(输入字符串、字符数)

我想你只需要
子字符串

您可以通过从“General_Notes_Conv”的位置减去“General_Notes”的位置并调整开始标记(即“General_Notes”)的长度来查找
长度
,因为索引给出了字符串的开头


SUBSTRING(column\u name,CHARINDEX('General\u Notes',column\u name)+LEN('General\u Notes',column\u name')、CHARINDEX('General\u Notes',column\u name))

子字符串中的第三个参数给出长度,指定将返回表达式的多少个字符。子字符串中的第三个参数提供长度,指定将返回表达式的多少个字符。