XML로 정의된 필드에서 SQL Server에서 XML 조회

4

질문:

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