Dela via


Mängdfunktioner – min

gäller för:SQL Server

Returnerar från en sekvens med atomiska värden, $arg, det enda objekt vars värde är mindre än det för alla andra.

Syntax

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

Argument

$arg
Sekvens med objekt som minimivärdet ska returneras från.

Anmärkningar

Alla typer av atomiserade värden som skickas till min() måste vara undertyper av samma bastyp. Bastyper som godkänns är de typer som stöder åtgärden gt. Dessa typer omfattar de tre inbyggda numeriska bastyperna, bastyperna datum/tid, xs:string, xs:boolean och xdt:untypedAtomic. Värden av typen xdt:untypedAtomic omvandlas till xs:double. Om det finns en blandning av dessa typer, eller om andra värden av andra typer skickas, utlöses ett statiskt fel.

Resultatet av min() tar emot bastypen för de skickade typerna, till exempel xs:double när det gäller xdt:untypedAtomic. Om indata är statiskt tomma är tom underförstått och ett statiskt fel returneras.

Funktionen min() returnerar det enda värdet i sekvensen som är mindre än något annat i indatasekvensen. För xs:string-värden används unicode codepoint-standardsortering. Om ett xdt:untypedAtomic-värde inte kan omvandlas till xs:double ignoreras värdet i indatasekvensen $arg. Om indata är en dynamiskt beräknad tom sekvens returneras den tomma sekvensen.

Exempel

Det här avsnittet innehåller XQuery-exempel mot XML-instanser som lagras i olika XML- typkolumner i AdventureWorks-databasen.

A. Använda XQuery-funktionen min() för att hitta den arbetsplatsplats som har minst antal arbetstimmar

Följande fråga hämtar alla arbetscenterplatser i tillverkningsprocessen för produktmodellen (ProductModelID=7) som har minst antal arbetstimmar. Som du ser i följande returneras vanligtvis en enda plats. Om flera platser hade lika många minsta arbetstimmar skulle alla returneras.

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  

Observera följande från föregående fråga:

  • Nyckelordet namnområde i XQuery-prologen definierar ett namnområdesprefix. Det här prefixet används sedan i XQuery-brödtexten.

XQuery-brödtexten konstruerar XML som har ett <Location>-element med WCID och LaborHrs attribut.

  • Frågan hämtar också värdena ProductModelID och name.

Det här är resultatet:

ProductModelID   Name              Result  
---------------  ----------------  ---------------------------------  
7                HL Touring Frame  <Location WCID="45" LaborHrs="0.5"/>   

Implementeringsbegränsningar

Det här är begränsningarna:

  • Funktionen min() mappar alla heltal till xs:decimal.

  • Funktionen min() för värden av typen xs:duration stöds inte.

  • Sekvenser som blandar typer över bastypsgränser stöds inte.

  • Det syntaktiska alternativet som tillhandahåller en sortering stöds inte.

Se även

XQuery Functions mot xml-datatypen