我正在使用XQuery从Sharepoint中提取数据。 xquery代码是:
{for $ancestor0 in $queryresponse//*:row
return<Row>
<Title>{fn:data($ancestor0/@ows_Title)}</Title>
<EventDate>{fn:data($ancestor0/@ows_EventDate)}</EventDate>
返回的数据是:
<h1>Meeting Agenda Event Date</h1>
New England APCD Work Group 6/26/2013
NY APD Workgroup 6/27/2013
MCDB 2012 Data Submission Bi-weekly 7/2/2013
MA APCD 7/3/2013
VA APCD Monthly Status 7/4/2013
Cross State Meeting 7/5/2013
NY APD Workgroup 7/11/2013
MA APCD 7/17/2013
Cross State Meeting 7/19/2013
NY APD Workgroup 7/25/2013
MA APCD 7/31/2013
New England APCD Work Group 7/31/2013
VA APCD Monthly Status 8/1/2013
Cross State Meeting 8/2/2013
我需要获取当前周的行数吗?所以我只得到以下行作为结果:
MA APCD 7/17/2013
Cross State Meeting 7/19/2013
有人可以帮我解决问题吗?
答案 0 :(得分:1)
最后你需要解决两个问题。一个是解析这些日期,另一个是验证它们是否在本周。
测试当天是否在当周是一个特殊情况,即一天是否在某一天的同一周,即当天的一天。
declare function local:in-current-week($date as xs:date)
as xs:boolean
{
local:in-same-week(current-date(), $date)
};
为了测试某一天是否在某一周内,您需要找到一周的开始和结束。如果您知道星期几,那么找到星期的开始是很容易的。并且可以通过计算已知星期开始的天数来做到这一点(任意选择,让我们去参加1912年6月23日星期日)并使用剩下的除以一周的长度。
如果你想在星期一开始几个星期,只需将日期改为1,我会去1938年1月10日。
declare function local:in-same-week($date1 as xs:date, $date2 as xs:date)
as xs:boolean
{
let $dayOfMonth := abs(($date1 - xs:date('1912-06-23')) div xs:dayTimeDuration('P1D') mod 7)
let $startOfWeek := $date1 - $dayOfMonth * xs:dayTimeDuration('P1D')
let $endOfWeek := $startOfWeek + 7 * xs:dayTimeDuration('P1D')
return $startOfWeek <= $date2 and $date2 < $endOfWeek
};
local:in-current-week(xs:date('2013-07-17'))
xs:date
这不仅仅涉及简单的正则表达式(对于所有日期AC都有效):
xs:date(replace('07/10/2013', '(\d{1,2})/(\d{1,2})/(\d+)', '$3-$1-$2'))
最后,您可以通过在查询中添加此where
子句进行过滤:
where local:in-current-week(xs:date(replace(@ows_Title, '(\d{1,2})/(\d{1,2})/(\d{4})', '$3-$1-$2')))