Funzione min (XQuery)

Da una sequenza di valori atomici, $arg, restituisce un singolo elemento con valore minore rispetto a quello di tutti gli altri elementi.

Sintassi

fn:min($arg as xdt:anyAtomicType*) as xdt:anyAtomicType?

Argomenti

  • $arg
    Sequenza di elementi da cui viene restituito il valore minimo.

Osservazioni

Tutti i tipi dei valori atomizzati passati alla funzione min() devono essere sottotipi dello stesso tipo di base. I tipi di base accettati sono quelli che supportano l'operazione gt. Tra questi tipi sono inclusi i tre tipi di base numerici predefiniti, ovvero i tipi di base di data/ora xs:string, xs:boolean e xdt:untypedAtomic. Per i valori di tipo xdt:untypedAtomic viene eseguito il cast a xs:double. In presenza di una combinazione di questi tipi o nel caso in cui vengano passati altri valori di altri tipi, viene restituito un errore statico.

Il risultato della funzione min() riceve il tipo di base dei tipi passati, ad esempio xs:double nel caso di xdt:untypedAtomic. Se l'input è una sequenza vuota calcolata in modo statico, la sequenza vuota è implicita e viene restituito un errore statico.

La funzione min() restituisce il singolo valore della sequenza di input che risulta minore di ogni altro. Per i valori xs:string, vengono utilizzate le regole di confronto predefinite dei punti di codice Unicode. Se non è possibile eseguire il cast del valore xdt:untypedAtomic a xs:double, il valore viene ignorato nella sequenza di input $arg. Se l'input è una sequenza vuota calcolata in modo dinamico, viene restituita la sequenza vuota.

Esempi

In questo argomento vengono forniti esempi di utilizzo del linguaggio XQuery sulle istanze XML archiviate in diverse colonne di tipo xml nel database AdventureWorks2008R2. Per una panoramica su ognuna di queste colonne, vedere Rappresentazione del tipo di dati XML nel database AdventureWorks2008R2.

A. Utilizzo della funzione XQuery min() per l'individuazione del centro di lavorazione con il numero minimo di ore di manodopera

La query seguente recupera tutti i centri di lavorazione con il numero minimo di ore di manodopera inclusi nel processo di produzione del modello del prodotto (ProductModelID=7). In genere, come illustrato nell'esempio seguente, viene restituito un singolo centro. Nel caso in cui esistano più centri con lo stesso numero minimo di ore di manodopera, vengono restituiti tutti questi centri.

select ProductModelID, Name, Instructions.query('
  declare namespace AWMI=
    "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
  for   $Location in /AWMI:root/AWMI:Location
  where $Location/@LaborHours =
          min( /AWMI:root/AWMI:Location/@LaborHours )
return
  <Location WCID=     "{ $Location/@LocationID }" 
              LaborHrs= "{ $Location/@LaborHours }" />
  ') as Result 
FROM  Production.ProductModel
WHERE ProductModelID=7;

Dalla query precedente si noti quanto segue:

  • La parole chiave namespace nel prologo XQuery definisce un prefisso dello spazio dei nomi. In seguito, tale prefisso viene utilizzato nel corpo della query XQuery.

Il corpo della query XQuery costruisce la struttura XML che include un elemento <Location> con gli attributi WCID e LaborHrs.

  • La query recupera inoltre i valori del modello del prodotto ProductModelID e dei nomi.

Risultato:

ProductModelID Nome Risultato

--------------- ---------------- ---------------------------------

7 HL Touring Frame <Location WCID="45" LaborHrs="0,5"/>

Limitazioni di implementazione

Limitazioni:

  • La funzione min() esegue il mapping tra tutti i valori integer e xs:decimal.

  • Non è supportata la funzione min() sui valori di tipo xs:duration.

  • Non sono supportate le sequenze con combinazioni di tipi che non rispettano i limiti del tipo di base.

  • Non è supportata l'opzione sintattica che fornisce le regole di confronto.

Vedere anche

Riferimento