Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL中提取列的一部分_Sql_Sql Server - Fatal编程技术网

如何在SQL中提取列的一部分

如何在SQL中提取列的一部分,sql,sql-server,Sql,Sql Server,我的SQL表中有以下列: CAST([content_html] AS XML).query('/root/Physicians/picture/img') AS [Image] 这就产生了: <img alt="Basil Abdeljaber" src="/uploadedImages/svr/physicians/images/Image - Abdelj.JPG?n=2086" /> SQL中是否有任何方法可以提取src=“和”之间的字符串,因此我只剩下:/uploa

我的SQL表中有以下列:

CAST([content_html] AS XML).query('/root/Physicians/picture/img') AS [Image]
这就产生了:

<img alt="Basil Abdeljaber" src="/uploadedImages/svr/physicians/images/Image - Abdelj.JPG?n=2086" />

SQL中是否有任何方法可以提取
src=“
之间的字符串,因此我只剩下:
/uploadedImages/svr/medicages/images/Image-Abdel.JPG?n=2086
试试这个:

SELECT SUBSTRING([Image], CHARINDEX('src="', [Image]) + 4, (CHARINDEX('"', [Image], CHARINDEX('src="', [Image]) + 5)) - (CHARINDEX('src="', [Image]) + 4))
其工作原理如下:
SUBSTRING
接受三个参数:

  • 原始字符串
  • 从中提取子字符串的起始点的索引,以及
  • 子字符串的长度
因此,在上面的代码中,第一个参数是您的
[Image]
列。第二个参数使用
CHARINDEX
获取子短语
src=“
的索引,然后将
4
添加到该子短语上以跳过该子短语。第三个参数使用结束引号
的索引减去
src的索引=“
我们已经找到了,它提供了子字符串的长度。

请尝试以下操作:

SELECT SUBSTRING([Image], CHARINDEX('src="', [Image]) + 4, (CHARINDEX('"', [Image], CHARINDEX('src="', [Image]) + 5)) - (CHARINDEX('src="', [Image]) + 4))
其工作原理如下:
SUBSTRING
接受三个参数:

  • 原始字符串
  • 从中提取子字符串的起始点的索引,以及
  • 子字符串的长度

因此,在上面的代码中,第一个参数是您的
[Image]
列。第二个参数使用
CHARINDEX
获取子短语
src=“
的索引,然后将
4
添加到该子短语上以跳过该子短语。第三个参数使用结束引号
的索引减去
src的索引=“
我们已经找到了,它提供了子字符串的长度。

只需将SQL更改为:

CAST([content_html] AS XML).value('(root/Physicians/picture/img/@src)[1]','varchar(255)') AS [Image]

要查询/root/medicines/picture/img节点的src属性,只需将SQL更改为:

CAST([content_html] AS XML).value('(root/Physicians/picture/img/@src)[1]','varchar(255)') AS [Image]


查询/root/medicages/picture/img节点的src属性。

感谢您的查询和解释,但我得到了以下错误:
不允许从数据类型xml隐式转换为varchar。使用CONVERT函数运行此查询。
然后将我给您的代码中出现的所有
[Image]
替换为
CONVERT(VARCHAR(MAX),[Image])
。我将现有行替换为:
SUBSTRING(CONVERT(VARCHAR(MAX),CAST([content\u html]作为XML)。query('/root/medicines/picture/img')),CHARINDEX('src')=“’,CONVERT(VARCHAR(MAX),CAST([content_html]asxml)。query('/root/medicages/picture/img'))+4,(CHARINDEX(''”),CONVERT(VARCHAR(MAX),CAST([content_html]asxml)。query('/root/medicages/picture/img')),CHARINDEX('src=“”,CONVERT(VARCHAR(MAX),CAST([content_html]asxml)。query('/root/medicages/picture/picture/img'))+5))-(CHARINDEX('src=“”,CONVERT(VARCHAR(MAX),CAST([content_html]asxml.query('/root/medicines/picture/img'))+4)),
我试图使用您的查询并替换我的查询,因为它不是一个表,只是一个查询。当我执行查询时,我与表一起显示,然后它很快消失,我得到以下错误:
传递给LEFT或SUBSTRING函数的长度参数无效。
我不知道,但如果您中断e,您可能可以更轻松地调试它将所有内容转换为它们自己的变量,并查询这些变量以查看它们包含的内容。例如,为xml声明一个变量,并将
CAST([content_html]作为xml)赋值。查询('/root/medicines/picture/img'))
对其进行转换,然后使用该变量,而不是将其硬编码为我提供的内容。感谢您的查询和解释,但我得到了以下错误:
不允许从数据类型xml隐式转换为varchar。请使用CONVERT函数运行此查询。
然后替换所有出现的
[Image]
在我用
CONVERT(VARCHAR(MAX),[Image])
给你的代码中,我用以下内容替换了我的现有行:
SUBSTRING(CONVERT(VARCHAR(MAX),CAST([content_html]AS XML)。query('/root/medicars/picture/img')、CHARINDEX('src=“”,CONVERT(VARCHAR(MAX),CAST([content_html]AS XML)。query('/root/medicamericars/picture/img'))+4,(CHARINDEX)(“”,CONVERT(VARCHAR(MAX),CAST([content_html]asxml)。query(“/root/medicines/picture/img”)),CHARINDEX('src=“”),CONVERT(VARCHAR(MAX),CAST([content_html]asxml)。query(“/root/medicines/picture/img”))+5-(CHARINDEX('src=“”,CONVERT(VARCHAR(MAX),CAST([content_html]asxml)。query('root/medicingers/picture/img'))+4)),
我试图使用您的查询并替换我的查询,因为它不是一个表,只是一个查询。当我执行查询时,我与表一起显示,然后它很快消失,我得到以下错误:
传递给LEFT或SUBSTRING函数的长度参数无效。
我不知道,但如果您中断e,您可能可以更轻松地调试它将所有内容转换为它们自己的变量,并查询这些变量以查看它们包含的内容。例如,为xml声明一个变量,并将
CAST([content_html]作为xml)赋值。查询('/root/medicines/picture/img'))
对其进行修改,然后使用该变量,而不是将其硬编码为我给您的内容。谢谢,但我遇到了以下错误:
XQuery[query()]:属性可能不会出现在元素外部
请重试-我已将答案更新为使用.value()而不是.query()。谢谢。我正在查看
value())
也一样。效果很好:)谢谢。+1一种比我更优雅的方法:)XPath不是我最强的技能。@roryap感谢你们两位:)谢谢,但我得到了这个错误:
XQuery[query()]:属性可能不会出现在元素之外
请再试一次-我已将我的答案更新为使用.value()而不是.query()。谢谢。我也在研究
value()
。效果很好:)谢谢。+1比我更优雅的方法:)XPath不是我最强的技能。@roryap谢谢你们两位:)