【问题标题】:How can I only retrieve rows with dates greater than today's date from an XML column in SQL Server?如何仅从 SQL Server 中的 XML 列中检索日期大于今天日期的行?
【发布时间】:2013-06-26 17:46:38
【问题描述】:

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

我收到的下面最后一行的错误是:XQuery [LB_Webinar.WebinarXML.exist()]: There is no function '{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 代码:

<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>

【问题讨论】:

  • 您是否有机会更改 XML 中日期时间值的表示以使用 ISO8601 日期时间格式 yyyy-mm-ddThh:mi:ss.mmm
  • @Mikael,是的,我绝对可以做到。
  • 好,datetime 的值应该是 represented in XML

标签: sql sql-server xml xquery


【解决方案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,则上述代码有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2012-08-10
    • 2021-03-09
    • 2018-04-05
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多