在SQL中使用XML时的Where子句

在SQL中使用XML时的Where子句,sql,sql-server,xml,sql-server-2012,Sql,Sql Server,Xml,Sql Server 2012,我目前正在SQL表中使用XML数据类型 我的数据表如下所示 Id | Name | Surname | Title | Location | Artist | ------------------------------------------------------- 1 | xxx | abc | def | London | XML | 2 | xxx | abc | def | Oslo | XML | 3 | xxx |

我目前正在SQL表中使用XML数据类型

我的数据表如下所示

Id | Name | Surname | Title  | Location | Artist |
-------------------------------------------------------
1  | xxx  | abc     | def    | London   | XML    |
2  | xxx  | abc     | def    | Oslo     | XML    |
3  | xxx  | abc     | def    | New York | XML    |
<song category="gaming">
<title>Valentine's Day</title>
<artist-main>Fatfinger</artist-main>
<artist-featured>Slimthumb</artist-featured>
<year>2013</year>
<price>29.99</price>
<album>Gamestain</album>
<albumimg>http://download.gamezone.com/uploads/image/data/875338/halo-4.jpg</albumimg>
<songurl>http://www.youtube.com/watch?v=-J0ABq9TnCw</songurl>
我的XML文件如下所示

Id | Name | Surname | Title  | Location | Artist |
-------------------------------------------------------
1  | xxx  | abc     | def    | London   | XML    |
2  | xxx  | abc     | def    | Oslo     | XML    |
3  | xxx  | abc     | def    | New York | XML    |
<song category="gaming">
<title>Valentine's Day</title>
<artist-main>Fatfinger</artist-main>
<artist-featured>Slimthumb</artist-featured>
<year>2013</year>
<price>29.99</price>
<album>Gamestain</album>
<albumimg>http://download.gamezone.com/uploads/image/data/875338/halo-4.jpg</albumimg>
<songurl>http://www.youtube.com/watch?v=-J0ABq9TnCw</songurl>

这是在SQL中查询XML数据的正确方法,还是SQL中有任何可以处理XML的内置函数。我是SQL新手。

您需要使用.value函数

SELECT Id, Name, Surname, Title 
FROM DATA 
WHERE Artist.value('(/song/artist-main)[1]','varchar(max)') LIKE '%FatFinger%'
试试这个:

declare @table table (
Id int, Name varchar(50), Surname varchar(50), 
Title  varchar(50), Location varchar(50), Artist xml)

insert into @table (Id, Name, Surname, Title, Location , Artist )
values(1, 'xxx', 'abc', 'def', 'London', '<song category="gaming"></song>
<title>Valentines Day</title>
<artist-main>Fatfinger</artist-main>
<artist-featured>Slimthumb</artist-featured>
<year>2013</year>
<price>29.99</price>
<album>Gamestain</album>
<albumimg>http://download.gamezone.com/uploads/image/data/875338/halo-4.jpg</albumimg>
<songurl>http://www.youtube.com/watch?v=-J0ABq9TnCw</songurl>')

SELECT Id, Name, Surname, Title 
FROM @table 
WHERE Artist.value('(/artist-main)[1]','varchar(max)') LIKE '%FatFinger%'
declare@table(
Id int,姓名varchar(50),姓氏varchar(50),
标题varchar(50)、位置varchar(50)、艺术家xml)
插入@table(Id、姓名、姓氏、头衔、位置、艺术家)
值(1,'xxx','abc','def','London','
情人节
胖子
瘦拇指
2013
29.99
配子染色
http://download.gamezone.com/uploads/image/data/875338/halo-4.jpg
http://www.youtube.com/watch?v=-J0ABq9TnCw')
选择Id、姓名、姓氏、头衔
来自@table
其中Artist.value(“(/Artist main)[1]”,“'varchar(max)”类似于“%FatFinger%”

您使用的是哪种RDBM、MS SQL Server、Oracle等。请重新标记您的问题,使其具有更好的可视性,从而引起注意。因此,请检查您的XML sintax,第3行和第4行没有正确的结束标记。应该是
artist-main
artist-feature
。我猜结尾有一个结束标记。@Yaroslav我在用MS-SQL2012@John我刚看了一下链接。谢谢,但我觉得有点高级。我刚刚开始使用sql不到10小时:)@FloodGravemind,没问题。关键是,当涉及XML字段时,您根本没有使用SQL。实际上,您正在使用XPath的一种形式。这个问题有一些链接可以解释它是如何工作的。您可以像在示例中那样将XML视为文本并使用字符串操作技术,但通常最好在XML上使用特定于XML的工具。您是否要回答所有XML sql问题:)否:)。我最近学习了一些xml,所以我才知道答案。@Mike我能在这个语句中使用“=”操作符而不是“Like”吗?还有一件事,“[1]”表示什么?ThanksGetting-无法在nvarchar(max)上调用方法。我是否可以在此语句中使用“=”运算符而不是“Like”?还有一件事,“[1]”表示什么?谢谢,你可以。只需删除通配符。另外,[1]表示将在该歌曲/艺术家主节点返回第一个值。这就是你想要的。约翰·甘特在上面的链接中也提到了这一点。