从SQL SELECT

时间:2018-04-04 18:37:59

标签: sql sql-server subquery

我正在尝试从SQL查询中提取XML字符串中元素的值。在下面的代码中,OPDV.DialValue返回带有我想要检索的元素的XML字符串。

select OPDV.DialValue as DueDate           -- DialValue returns an XML string
from Orders O

join OrderProduct OP
    on OP.OrderID = O.OrderID

join OrderProductDialValue OPDV
    on OPDV.OrderProductID = OP.OrderProductID

join Dial_Culture DC
    on DC.DialID = OPDV.DialID

join Users U
    on U.UserID = O.CustomerID

where (O.OrderId = @OrderId) and (DC.FriendlyName = 'Due Date & Time')

这将返回下面的XML。我必须在这里的代码中包含注释,因为标签会消失,只显示数据。

<!--<DateTime><Server>03/04/2018 10:00:03</Server><Client>03/04/2018 10:00:00</Client><FriendlyDisplay>4/3/2018 10:00 AM</FriendlyDisplay></DateTime>-->

我需要从FriendlyDisplay中提取数据。我可以使用下面的代码解析XML。这将返回 4/3/2018 10:00 AM

DECLARE @form XML = '<DateTime><Server>03/04/2018 10:00:03</Server><Client>03/04/2018 10:00:00</Client><FriendlyDisplay>4/3/2018 10:00 AM</FriendlyDisplay></DateTime>'

SELECT a.b.value('FriendlyDisplay[1]', 'varchar(100)')
    FROM @form.nodes('DateTime') a(b) 

我尝试使用子查询来替换XML字符串中的FriendlyValue的OPDV.DialValue,但没有任何效果。我无法在子查询中声明变量,即

select (declare @form xml=OPDV.DialValue; select ... )

SQL用于在Web应用程序中执行的函数。有没有办法从FriendlyValue中提取文本?

感谢。

1 个答案:

答案 0 :(得分:0)

如果我理解你要问的是什么......你正试图从XML中获取一个值并将其设置为变量......那么,如下所示?

DECLARE @form XML = '<DateTime><Server>03/04/2018 10:00:03</Server><Client>03/04/2018 10:00:00</Client><FriendlyDisplay>4/3/2018 10:00 AM</FriendlyDisplay></DateTime>'

DECLARE @MyDate DATETIME

SELECT @MyDate = a.b.value('FriendlyDisplay[1]', 'varchar(100)')
    FROM @form.nodes('DateTime') a(b) 

SELECT * FROM sometable WHERE someDate = @MyDate
相关问题