如何从SQL Server中的XML列中仅检索日期大于今天日期的行?

时间:2013-06-26 17:46:38

标签: sql sql-server xml xquery

我想只返回SQL Server中当前日期之后XML列中有日期的行。我怎么能这样做?

我在下面最后一行收到的错误是: XQuery [LB_Webinar.WebinarXML.exist()]:没有函数“{http://www.w3.org/2004/07/xpath-functions}:GETDATE()' < / p>

(
   @Site varchar(10)
)

AS

WITH XMLNAMESPACES ('http://www.testsite.com/ClientWebinar' as lbx)

SELECT * FROM LB_Webinar 

WHERE

Site = @Site

AND

LB_Webinar.WebinarXML.exist('/lbx:CLIENT_WEBINAR/lbx:WEBINAR/lbx:WEBINARDATE > GETDATE()') = 1

XML代码:

<lbx:CLIENT_WEBINAR xmlns:lbx="http://www.testsite.com/ClientWebinar">
    <lbx:WEBINAR>
        <lbx:WEBINARDATE>6/18/2013 2:00:00 PM</lbx:WEBINARDATE>
    </lbx:WEBINAR>
</lbx:CLIENT_WEBINAR>

1 个答案:

答案 0 :(得分:1)

您可以将今天的datetime值存储在变量中,并使用表达式中的sql:variable()在比较中使用该变量。

DECLARE @Today DATETIME;
SET @Today = GETDATE();

WITH XMLNAMESPACES ('http://www.testsite.com/ClientWebinar' as lbx)
SELECT *
FROM LB_Webinar 
WHERE LB_Webinar.WebinarXML.exist('/lbx:CLIENT_WEBINAR/lbx:WEBINAR/lbx:WEBINARDATE/text()[. > sql:variable("@Today")]') = 1;

注意:如果您将datetime值更改为ISO8601 yyyy-mm-ddThh:mi:ss.mmm,则上述代码有效。