3

SQL Server 2008 の場合。

次のようなクエリを実行する必要があります。

DECLARE @x AS xml
SET @x=N'<r><c>First Text</c></r><r><c>Other Text</c></r>'
SELECT @x.query('fn:max(r/c)')

しかし、何も返さない (明らかに xdt:untypedAtomic を数値に変換するため)

r/c を varchar に「キャスト」する方法は?

何かのようなもの

SELECT @x.query('fn:max(«CAST(r/c «AS varchar(20))»)')

編集: Nodes を使用した関数 MAX は、T-SQL no fn:max function からのものです。このコードでは:

DECLARE @x xml;
SET @x = '';
SELECT @x.query('fn:max((1, 2))');
SELECT @x.query('fn:max(("First Text", "Other Text"))');

query return expected: 2 と "Other Text" fn:max の両方で、文字列式をアドホックに評価できます。しかし、最初のクエリは機能しません。文字列引数を fn:max に強制する方法は?

4

2 に答える 2

3

これにより、T-SQLでaggregatemax関数が実行されます。

DECLARE @x AS xml
 SET @x=N'<r><c>First Text</c></r><r><c>Other Text</c></r>'

  SELECT 
  MAX(r.value('.','varchar(25)'))
  FROM @x.nodes('/r/c') r([r])

戻り値

Other Text

あなたの更新後、私はあなたの質問をよりよく理解していると思います。残念ながら、これはMS SQL Server2008R2では実行できないようです。

DECLARE @x AS xml
SET @x=N'<r><c>First Text</c></r><r><c>Other Text</c></r>'
SELECT @x.query('fn:max(xs:string(r/c))') 

エラーが発生します:

Msg 2365, Level 16, State 1, Line 3
XQuery [query()]: Cannot explicitly convert from 'xdt:untypedAtomic *' to 'xs:string'

Microsoftによると、型キャストは有効ですが、機能する構文を見つけることができませんでした。

于 2010-12-23T17:18:57.027 に答える
3
DECLARE @x AS xml
    , @val nvarchar(100) = 'Other Text'
SET @x=N'<r><c>First Text</c></r><r><c>Other Text</c></r>'
SELECT @x.query('fn:max(for $r in //r return xs:string ($r))')
于 2012-02-24T23:32:40.353 に答える