XML로 정의된 필드에서 SQL Server에서 XML 조회
4
나는 주조 날짜와 DateTime2를 사용해 보았지만 아무런 효과가 없었다.
도와줄 사람 있어요?
참고:
질의의 where 자문을 다음으로 변경했습니다.
XML, XQuery & Perfomance Issues
질문:
다음 XML 세션이 있습니다.<Plan>
<CurrentTransaction StartDate="2016-01-01" EndDate="2016-01-31">
</CurrentTransaction>
<Transaction StartDate="2015-10-01" EndDate="2015-10-31">
</Transaction>
<Transaction StartDate="2015-11-01" EndDate="2015-11-30">
</Transaction>
<Transaction StartDate="2015-12-01" EndDate="2015-12-31">
</Transaction>
</Plan
다음 SQL을 사용하여 날짜에 따라 질의를 시도합니다.DECLARE @StartDate AS Datetime = '2015-10-01'
DECLARE @EndDate AS Datetime = '2015-10-31'
SELECT [Tran].T.value('(@StartDate)[1]','datetime') AS TranStart,
FROM [dbo].MyTable mt
CROSS APPLY pp.MyXMl.nodes('(Plan/Transaction , Plan/CurrentTransaction)') AS [Tran](T)
WHERE [Tran].T.value( '(@StartDate)[1]','datetime2')
BETWEEN ISNULL(@StartDate, [Tran].T.value( '(@StartDate)[1]','datetime2'))
AND ISNULL(@EndDate,[Tran].T.value( '(@StartDate)[1]','datetime2'))
그래서 이론적으로 말하자면 위에서 언급한 것은 10월의 기록일 것이다. 그러나 그것은 없다. 그것은 모든 기록을 가지고 돌아왔다.나는 주조 날짜와 DateTime2를 사용해 보았지만 아무런 효과가 없었다.
도와줄 사람 있어요?
참고:
질의의 where 자문을 다음으로 변경했습니다.
[Tran].T.value( '(@StartDate)[1]','datetime') BETWEEN @StartDate AND @EndDate
난 똑같아답안
DECLARE @xml XML ='
<Plan>
<CurrentTransaction StartDate="2016-01-01" EndDate="2016-01-31" />
<Transaction StartDate="2015-10-01" EndDate="2015-10-31" />
<Transaction StartDate="2015-11-01" EndDate="2015-11-30" />
<Transaction StartDate="2015-12-01" EndDate="2015-12-31" />
</Plan>'
DECLARE
@StartDate DATE = '2015-10-01'
, @EndDate DATE = '2015-10-31'
SELECT *
FROM (
SELECT
StartDate = t.c.value('@StartDate','DATE')
, EndDate = t.c.value('@EndDate','DATE')
FROM @xml.nodes('Plan/*') t(c)
) t
WHERE StartDate BETWEEN ISNULL(@StartDate, StartDate) AND ISNULL(@EndDate, EndDate)
결과-StartDate EndDate
---------- ----------
2015-10-01 2015-10-31
업데이트 -DECLARE
@StartDate DATE = '2015-10-01'
, @EndDate DATE = '2015-10-31'
SELECT *
FROM (
SELECT
StartDate = t.c.value('@StartDate','DATE')
, EndDate = t.c.value('@EndDate','DATE')
FROM dbo.MyTable
CROSS APPLY MyXMl.nodes('Plan/*') t(c)
) t
WHERE StartDate BETWEEN ISNULL(@StartDate, StartDate) AND ISNULL(@EndDate, EndDate)
이거 봐-XML, XQuery & Perfomance Issues