Standardisierte SQL-Funktionen in ArcGIS Online

In ArcGIS Online müssen Entwickler beim Abfragen gehosteter Feature-Layer standardisierte SQL-Abfragen verwenden. Die Verwendung standardisierter SQL-Abfragen trägt zur Verhinderung der Einschleusung von SQL-Befehlen bei. In allen ArcGIS-Anwendungen werden standardmäßige SQL-Abfragen unterstützt.

Einschränkungen bei standardisierten Abfragen

  • Standardisierte Abfragen werden auf die gesamte Organisation angewendet. Es ist nicht möglich, sie für bestimmte Layer zu deaktivieren.
  • Standardisierte Abfragen werden nicht für Verbindungen zwischen unterschiedlichen Workspaces unterstützt.
  • Unterabfragen wie eine WHERE-Klausel, beispielsweise POP_2010 = (SELECT min(POP_2010) FROM counties, werden nicht unterstützt.
  • Abfragen aus Datenbank-Services, zum Beispiel Microsoft Azure SQL Database, werden nicht unterstützt.

Unterstützte SQL-Funktionen in ArcGIS Online

Wenn Sie als App-Entwickler aktuell eine datenbankspezifische Syntax der WHERE-Klausel verwenden, müssen Sie die WHERE-Klauseln im Code der App aktualisieren und eine bekannte, von ArcGIS Online unterstützte Syntax verwenden. Aus der folgenden Tabelle geht hervor, welche SQL-Funktionen unterstützt werden und wie die jeweilige Syntax lautet. Wenn die folgenden Funktionen und die Syntax in Ihren Apps verwendet werden, konvertiert ArcGIS Online sie entsprechend den Spezifikationen der Datenbank, die von dem Feature-Layer verwendet wird.

Datumsfunktionen

FunktionBeschreibung

CURRENT_DATE()

Gibt das aktuelle Datum in UTC-Zeit zurück.

Der angezeigte Wert hängt von dem von Ihnen verwendeten Client ab. In ArcGIS Online werden Datumsangaben in der Zeitzone Ihrer Organisation oder Ihres Profils angezeigt.

CURRENT_TIME()

Gibt das aktuelle UTC-Datum und die UTC-Uhrzeit (Stunden, Minuten, Sekunden) zurück.

Der angezeigte Wert hängt von dem von Ihnen verwendeten Client ab. In ArcGIS Online wird die Uhrzeit in der lokalen Uhrzeit Ihrer Organisation oder Ihres Profils angezeigt.

CURRENT_TIMESTAMP()

Gibt das aktuelle UTC-Datum und die UTC-Uhrzeit (Stunden, Minuten, Sekunden, Millisekunden) zurück.

Der angezeigte Wert hängt von dem von Ihnen verwendeten Client ab. In ArcGIS Online wird die Uhrzeit in der lokalen Uhrzeit Ihrer Organisation oder Ihres Profils angezeigt.

EXTRACT(<unit> FROM <date>)

Gibt einen Teil (<unit>) des angegebenen Datums (<date>) zurück. Zu den möglichen <unit>-Werten zählen unter anderem year, month, day, hour und minute.

In den folgenden Beispielen werden verschiedene Werte aus dem Datum- und Uhrzeitwert 2016-12-21 15:11 extrahiert:

  • EXTRACT(MONTH FROM TIMESTAMP '2016-12-21 15:11:00'): Ergebnis ist 12.
  • EXTRACT(DAY FROM TIMESTAMP '2016-12-21 15:11:00'): Ergebnis ist 21.
  • EXTRACT(HOUR FROM TIMESTAMP '2016-12-21 15:11:00'): Ergebnis ist 15.

Numerische Funktionen

FunktionBeschreibung

ABS(<number>)

Gibt den absoluten (positiven) Wert der angegebenen Zahl zurück.

CAST(<number> AS FLOAT | INT)

Konvertiert eine Zahl in einen anderen Typ. FLOAT konvertiert die angegebene Zahl in einen Double-Wert und INT konvertiert sie in einen Integer.

Im ersten Beispiel unten wird die Zahl in eine ganze Zahl umgewandelt. Da es sich bei Ganzzahlen um ganze Zahlen handelt, ist das Ergebnis 1424. Im zweiten Beispiel wird eine Ganzzahl in eine Fließkommazahl umgewandelt. Das Ergebnis ist eine Zahl mit Dezimalstellen, also 1424,0.

  • CAST(1424.49 AS INT)
  • CAST(1424 AS FLOAT

CEILING(<number>)

Gibt die kleinste Ganzzahl zurück, die größer als oder gleich der angegebenen Zahl ist.

Im folgenden Beispiel wird 13 zurückgegeben.

CEILING(12.93)

COS(<number>)

Gibt den trigonometrischen Cosinus von <number> zurück, von dem angenommen wird, dass es sich um einen Winkel in Radianten handelt.

FLOOR(<number>)

Gibt die größte Ganzzahl zurück, die kleiner als oder gleich der angegebenen Zahl ist.

Im folgenden Beispiel wird 12 zurückgegeben.

FLOOR(12.93)

LOG(<number>)

Der natürliche Logarithmus der angegebenen Zahl.

LOG10(<number>)

Der Logarithmus zur Basis 10 der angegebenen Zahl.

MOD(<number>, <n>)

Gibt den Rest zurück, nachdem der Dividend (<Zahl>) durch den Divisor <n> dividiert wurde. Sowohl <n> als auch <Zahl> muss vom Typ "Integer" sein.

Hier einige Beispiele:

  • MOD(10, 4): Ergebnis ist 2.
  • MOD(CAST(DBLFIELD AS INT), 4): DBLFIELD ist ein Feld vom Typ "Double", sodass die Funktion CAST benötigt wird, um Werte vom Typ "Double" in den Typ "Integer" zu konvertieren.

NULLIF(<number>, <value>)

Gibt null zurück, wenn die angegebene Zahl gleich dem angegebenen Wert ist. NULLIF wird im Allgemeinen verwendet, um Fehler vom Typ "Division durch Null" zu vermeiden, indem <value> auf 0 gesetzt wird.

Wenn bei einer Berechnung eines der Argumente ein null-Feldwert ist, ist das Ergebnis der Berechnung null.

Beispiel: Sie müssen ein Double-Feld in TOTALPOP dividiert durch POP18 umrechnen. Wenn ein POP18-Wert eines Features gleich Null ist, führt die Berechnung zu dem Fehler "Division durch Null". Sie können einen Filter erstellen, um Datensätze auszublenden, bei denen POP18 gleich Null ist, und anschließend die Berechnung durchführen. Eine einfachere Option ist die Verwendung von NULLIF.

TOTALPOP / NULLIF(POP18, 0): Gibt null zurück, wenn POP18 gleich Null ist. Andernfalls wird der Wert TOTALPOP / POP18 zurückgegeben.

POWER(<number> , <y>)

Gibt den Wert der angegebenen Zahl potenziert mit der angegebenen Potenz (<y>) zurück.

Im folgenden Beispiel wird 32768 zurückgegeben.

POWER(8,5)

ROUND(<number> , <length>)

Rundet die angegebene Zahl auf die angegebene Länge.

Wenn Sie für <length> eine positive Zahl verwenden, wird die Zahl auf die Dezimalstelle rechts vom Dezimaltrennzeichen gerundet. Wenn <length> eine negative Zahl ist, wird die für <number> angegebene Zahl auf die Stelle links vom Dezimaltrennzeichen gerundet.

Im Folgenden finden Sie Beispiele:

  • ROUND(10.9934,2): Ergebnis ist 10,99.
  • ROUND(10.9964,2): Ergebnis ist 11,00.
  • ROUND(111.0,-2): Ergebnis ist 100,00.

SIN(<number>)

Gibt den trigonometrischen Sinus von <number> zurück, von dem angenommen wird, dass es sich um einen Winkel in Radianten handelt.

TAN(<number>)

Gibt den Tangens von <number> zurück, von dem angenommen wird, dass es sich um einen Winkel in Radianten handelt.

TRUNCATE(<number>,<decimal_place>)

Schneidet <number> an der angegebenen Dezimalstelle (<decimal_place>) ab.

Wenn <decimal_place> positiv ist, wird bis zur angegebenen Dezimalstelle gekürzt. Wenn <decimal_place> eine negative Zahl ist, wird <number> links vom Dezimaltrennzeichen gekürzt.

Im ersten Beispiel werden die Zahlen rechts der Dezimalstelle so abgeschnitten, dass nur zwei Ziffern vorhanden sind. Dies ergibt den Wert 111,99. Im zweiten Beispiel werden die Zahlen links der Dezimalstelle abgeschnitten, so dass sich der Wert 100,00 ergibt.

  • TRUNCATE(111.996,2)
  • TRUNCATE(111.996,-2)

Zeichenfolgenfunktion

FunktionBeschreibung

CAST(<string> AS DATE | TIME)

Konvertiert die Zeichenfolge in ein Datum oder eine Uhrzeit, wenn der Zeichenfolgenwert in einem unterstützten Format vorliegt.

Wenn die Zeichenfolge das Format "MM/TT/JJJJ hh:mm:ss" oder "JJJJ-MM-TT" hat, können Sie sie in ein Datum umwandeln. Wenn die Zeichenfolge das Format "HH:MM:SS" hat, können Sie sie in den Datentyp "Nur Zeit" (TIME) umwandeln.

Die folgende Zeichenfolge kann beispielsweise in ein Datum umgewandelt werden:

CAST('1988-05-30' AS DATE)

CHAR_LENGTH(<string>)

Gibt die Anzahl der Zeichen in der angegebenen Zeichenfolge zurück. Das Ergebnis ist ein Ganzzahlwert.

Die folgende Anweisung gibt beispielsweise 8 zurück:

CHAR_LENGTH('Redlands')

CONCAT(<string1>, <string2>)

Verbindet zwei Zeichenfolgewerte.

Es können nur zwei Zeichenfolgen bereitgestellt werden. Um mehr als zwei Zeichenfolgen zu verbinden, müssen aufeinanderfolgende CONCAT-Funktionen verschachtelt werden.

Das erste Beispiel unten verbindet die Buchstaben A und B. Das zweite Beispiel zeigt eine verschachtelte CONCAT-Funktion zur Verbindung von drei Zeichenfolgewerten, A, :, und B.

  • CONCAT('A', 'B'): Ergebnis ist 'AB'.
  • CONCAT('A', CONCAT(':', 'B')): Ergebnis ist 'A:B'.

NULL-Werte werden in eine leere Zeichenfolge konvertiert.

CURRENT_USER

Wird die CURRENT_USER-Funktion in einer Abfrage verwendet, funktioniert sie ähnlich wie eine Variable. Der Benutzername des Benutzers, der auf den gehosteten Feature-Layer oder die Sicht eines gehosteten Feature-Layers zugreift, wird ermittelt und in der Abfrage verwendet.

Wenn zum Beispiel der Benutzer "planner3" bei der Organisation angemeldet ist, um auf eine Sicht eines gehosteten Feature-Layers zuzugreifen, die die folgende Abfragedefinition enthält, werden nur Features, bei denen das Feld "staffmember" den Wert "planner3" enthält, an den verbundenen Benutzer zurückgegeben:

staffmember=current_user

Im nächsten Beispiel werden mehrere Werte im Feld "staffmember" gespeichert. Die folgende where-Klausel findet den aktuellen Benutzernamen im Textwert des Feldes "staffmember", auch wenn mehrere Benutzernamen im Feld gespeichert sind:

where=position(current_user in staffmember)>0

POSITION(<substring>, <string>)

Gibt die Position des ersten Vorkommnisses der angegebenen Teilzeichenfolge in der angegebenen Zeichenfolge zurück. Wenn die angegebene Teilzeichenfolge nicht gefunden wird, ist das Ergebnis 0.

Im ersten Beispiel unten ist das Ergebnis 5, da der erste Buchstabe (b) der Unterzeichenfolge (boat) der fünfte Buchstabe in der Zeichenfolge (Sailboat) ist. Im zweiten Beispiel ist das Ergebnis 0, da die Unterzeichenfolge (motor) in der Zeichenfolge nicht enthalten ist.

  • POSITION('boat', 'Sailboat')
  • POSITION('motor', 'Sailboat')

SUBSTRING(<string>, <start>, <length>)

Gibt einen Teil eines Zeichenfolgewertes zurück. <start> ist ein Ganzzahlindex, der angibt, wo die zurückgegebenen Zeichen beginnen, und <length> ist die Anzahl der Zeichen, die zurückgegeben werden sollen.

Beispiele:

  • SUBSTRING('Sailboat', 5, 4): Ergebnis ist 'boat'.
  • SUBSTRING('Sailboat', 1, 4): Ergebnis ist 'Sail'.
  • SUBSTRING('Sailboat', 5, 100): Ergebnis ist 'boat'.

TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>)

Gibt eine Zeichenfolge zurück, bei der alle vor- und nachgestellten Leerstellen in der angegebenen Zeichenfolge entfernt wurden.

Im folgenden Beispiel ist vor und nach der Zeichenfolge "San Bernardino" ein Leerzeichen vorhanden. Das Schlüsselwort BOTH wird verwendet, um die Leerzeichenfolge (angegeben durch zwei einfache Anführungszeichen mit einem Leerzeichen dazwischen) vom Anfang und Ende der Textzeichenfolge zu entfernen:

TRIM(BOTH ' ' FROM ' San Bernardino ')

Dies gibt die Zeichenfolge 'San Bernardino' zurück.

UPPER(<string>)

Gibt eine Zeichenfolge zurück, bei der alle Zeichen in Großbuchstaben konvertiert wurden.

In diesem Beispiel werden alle Buchstaben in der Zeichenfolge "Sailboat" in Großbuchstaben umgewandelt. Das Ergebnis ist die Zeichenfolge 'SAILBOAT':

UPPER('Sailboat')

LOWER(<string>)

Gibt eine Zeichenfolge zurück, bei der alle Zeichen in Kleinbuchstaben konvertiert wurden.

Im nächsten Beispiel wird 'sailboat' zurückgegeben:

LOWER('Sailboat')