如何在SQL中提取列的一部分
我的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
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谢谢你们两位:)