[英]How can I only retrieve rows with dates greater than today's date from an XML column in SQL Server?
I want to only return rows that have a date in the XML column after the current date in SQL Server. 我只想返回在SQL Server中当前日期之后在XML列中具有日期的行。 How can i do this?
我怎样才能做到这一点?
The error i receive for the last line below is: XQuery [LB_Webinar.WebinarXML.exist()]: There is no function '{ http://www.w3.org/2004/07/xpath-functions }:GETDATE()' 我收到的以下最后一行错误是: XQuery [LB_Webinar.WebinarXML.exist()]:没有函数'{ http://www.w3.org/2004/07/xpath-functions }:GETDATE() “
(
@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 Code: 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>
You can store today's datetime
value in a variable and use sql:variable()
in your expression to use the variable in the comparison. 您可以将今天的
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;
Note: the above code works if you change your datetime
values to ISO8601 yyyy-mm-ddThh:mi:ss.mmm
. 注意:如果将
datetime
值更改为ISO8601 yyyy-mm-ddThh:mi:ss.mmm
则上述代码有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.