Standardowe funkcje SQL w serwisie ArcGIS Online

Usługa ArcGIS Online wymaga od deweloperów korzystania ze standardowych zapytań SQL podczas wykonywania zapytań dotyczących hostowanych warstw obiektowych. Ułatwia to deweloperom i aplikacjom obsługę zapytań dotyczących hostowanych warstw obiektowych i pomaga w zapobieganiu atakom polegającym na wprowadzaniu kodu SQL. Wszystkie aplikacje ArcGIS automatycznie obsługują standardowe zapytania SQL.

Ograniczenia związane z zapytaniami standardowymi

  • Korzystanie z zapytań standardowych jest konfigurowane dla całej instytucji, nie można go wyłączyć dla niektórych warstw.
  • Standardowe zapytania nie są obsługiwane dla połączeń między różnymi przestrzeniami roboczymi.
  • Zapytania podrzędne w postaci klauzuli WHERE, na przykład POP_2010 = (SELECT min(POP_2010) FROM counties, nie są obsługiwane.
  • Zapytania usług baz danych, na przykład Microsoft Azure SQL Database, również nie są obsługiwane.

Jakie funkcje SQL są obsługiwane w usłudze ArcGIS Online?

Jeśli jesteś deweloperem aplikacji obecnie używającym składni klauzuli WHERE specyficznej dla określonej bazy danych, musisz zaktualizować klauzule WHERE w kodzie aplikacji, tak aby zastosowana została standardowa składnia SQL obsługiwana w usłudze ArcGIS Online. Poniższe tabele zawierają obsługiwane funkcje SQL oraz składnię każdej z nich. Gdy następujące funkcje i składnie są używane w Twoich aplikacjach, serwis ArcGIS Online przekształca je, aby były zgodne z wymogami bazy danych używanej przez warstwę obiektów.

Funkcje daty

FunkcjaOpis

CURRENT_DATE()

Zwraca bieżącą datę jako czas UTC.

Sposób przedstawienia zależy od używanej aplikacji klienckiej. W usłudze ArcGIS Online daty są wyświetlane zgodnie ze strefą czasową danej instytucji lub profilu.

CURRENT_TIME()

Zwraca datę i czas w formacie UTC (w godzinach, minutach i sekundach).

Sposób przedstawienia zależy od używanej aplikacji klienckiej. W usłudze ArcGIS Online czas jest wyświetlany jako czas lokalny danej instytucji lub profilu.

CURRENT_TIMESTAMP()

Zwraca datę i czas w formacie UTC (w godzinach, minutach, sekundach i milisekundach).

Sposób przedstawienia zależy od używanej aplikacji klienckiej. W usłudze ArcGIS Online czas jest wyświetlany jako czas lokalny danej instytucji lub profilu.

EXTRACT(<unit> FROM <date>)

Zwraca jedną część (<unit>) podanej wartości <date>. Możliwe wartości <unit> to na przykład rok, miesiąc, dzień, godzina i minuta.

Przykłady

  • EXTRACT(MONTH FROM 12/21/2016) — zwraca 12.
  • EXTRACT(DAY FROM 12/21/2016 12:00) — zwraca 21.
  • EXTRACT(HOUR FROM 12/21/2016 15:00) — zwraca 15.

Funkcje liczbowe

FunkcjaOpis

ABS(<number>)

Zwraca wartość bezwzględną (dodatnią) podanej liczby.

CEILING(<number>)

Zwraca najmniejszą liczbę całkowitą większą od podanej lub jej równą.

Przykład

  • CEILING(12.93) — wynik wynosi 13.

COS(<number>)

Zwraca wartość funkcji trygonometrycznej cosinus liczby <number>. Przyjmuje się, że liczba jest kątem wyrażonym w radianach.

CAST(<number> AS FLOAT | INT)

Przekształca liczbę na liczbę innego typu. FLOAT przekształca podaną liczbę na liczbę zmiennoprzecinkową podwójnej precyzji, natomiast funkcja INT przekształca ją na liczbę całkowitą.

FLOOR(<number>)

Zwraca największą liczbę całkowitą równą podanej liczbie lub od niej mniejszą.

Przykład

  • FLOOR(12.93) — wynik wynosi 12.

LOG(<number>)

Logarytm naturalny podanej liczby.

LOG10(<number>)

Logarytm dziesiętny podanej liczby.

MOD(<number>, <n>)

Zwraca resztę z dzielenia dzielnej (<liczba>) przez dzielnik <n>. Zarówno parametr <n>, jak i <liczba> muszą być liczbami całkowitymi.

Przykłady:

  • MOD(10, 4) — wynik wynosi 2.
  • MOD(CAST(DBLFIELD AS INT), 4)DBLFIELD to pole typu liczba zmiennoprzecinkowa podwójnej precyzji, dlatego konieczne jest zastosowanie funkcji CAST, która przekształca liczbę zmiennoprzecinkową podwójnej precyzji na liczbę całkowitą.

NULLIF(<number>, <value>)

Zwraca null, jeśli podana liczba jest równa podanej wartości. Funkcja NULLIF jest często stosowana, aby zapobiec wystąpieniu błędu dzielenia przez zero przez ustawienie wartości <value> równej 0.

Za każdym razem, gdy podczas wykonywania obliczeń napotykane jest pole o wartości null będące argumentem, wynikiem obliczenia jest wartość null.

Na przykład: użytkownik chce obliczyć wartość pola zmiennoprzecinkowego podwójnej precyzji jako TOTALPOP podzielone przez POP18. Jeżeli dla jakiegokolwiek obiektu wartość pola POP18 jest równa zero, obliczenie nie zostanie wykonane i wyświetlony zostanie komunikat o błędzie dzielenia przez zero. Można również utworzyć filtr umożliwiający ukrycie rekordów, w których wartość pola POP18 jest równa zero, a następnie wykonać odpowiednie obliczenia. Zastosowanie funkcji NULLIF jest szybszą metodą.

  • TOTALPOP / NULLIF(POP18, 0) — zwraca null, jeśli POP18 jest równe zero. W przeciwnym razie zwracana jest wartość TOTALPOP / POP18.

POWER(<number> , <y>)

Zwraca wartość podanej liczby podniesionej do podanej potęgi (<y>).

ROUND(<number> , <length>)

Zaokrągla podaną liczbę do podanej liczby miejsc po przecinku.

Jeżeli wartość <length> jest dodatnia, liczba zostaje zaokrąglona do podanej liczby miejsc po przecinku (<length>). W przypadku gdy liczba <length> jest ujemna, podana wartość <number> jest zaokrąglana po lewej stronie przecinka dziesiętnego.

Przykłady

  • ROUND(10.9934,2) — zwraca 10,99.
  • ROUND(10.9964,2) — zwraca 11,00.
  • ROUND(111.0,-2) — zwraca 100,00.

SIN(<number>)

Zwraca wartość funkcji trygonometrycznej sinus dla podanej liczby <number>. Przyjmuje się, że liczba ta jest kątem wyrażonym w radianach.

TAN(<number>)

Zwraca wartość funkcji trygonometrycznej tangens dla podanej liczby <number>. Przyjmuje się, że liczba ta jest kątem wyrażonym w radianach.

TRUNCATE(<number>,<decimal_place>)

Przycina wartość <number> do podanej liczby <decimal_place>.

Jeśli <decimal_place> jest dodatnia, wartość zostaje przycięta do podanej liczby miejsc po przecinku. W przypadku gdy liczba <decimal_place> jest ujemna, wartość <number> jest przycinana po lewej stronie przecinka dziesiętnego.

Przykłady

  • TRUNCATE(111.996,2) — zwraca 111,99.
  • TRUNCATE(111.996,-2) — zwraca 100,00.

Funkcje ciągów znakowych

FunkcjaOpis

CHAR_LENGTH(<string>)

Zwraca liczbę znaków w podanym ciągu znakowym. Wynik ma postać liczby całkowitej.

Przykład

  • CHAR_LENGTH('Redlands') — wynik wynosi 8.

CONCAT(<string1>, <string2>)

Łączy dwie wartości ciągu znakowego.

Można podać tylko dwa ciągi. Aby połączyć więcej niż dwa ciągi znakowe, należy zagnieździć kilka funkcji CONCAT, jak przedstawiono poniżej.

Przykłady

  • CONCAT('A', 'B') — wynik wynosi 'AB'.
  • CONCAT('A', CONCAT(':', 'B')) — wynik wynosi 'A:B'.

Wartości puste są przekształcane do pustych ciągów znakowych.

POSITION(<substring>, <string>)

Zwraca pozycję pierwszego wystąpienia podanego podciągu w podanym ciągu znakowym. Jeżeli podany podciąg nie zostanie znaleziony, wynik wynosi 0.

Przykłady

  • POSITION('boat', 'Sailboat') — wynik wynosi 5.
  • POSITION('motor', 'Sailboat') — wynik wynosi 0.

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

Zwraca część wartości ciągu znakowego; <start> to indeks liczby całkowitej określający, gdzie rozpoczynają się zwracane znaki, a <length> jest liczbą zwracanych znaków.

Przykłady

  • SUBSTRING('Sailboat', 5, 4) — wynik wynosi 'boat'.
  • SUBSTRING('Sailboat', 1, 4) — wynik wynosi 'Sail'.
  • SUBSTRING('Sailboat', 5, 100) — wynik wynosi 'boat'.

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

Zwraca ciąg znakowy, który jest podanym ciągiem z usuniętymi wszystkimi spacjami początkowymi i końcowymi.

Przykład

  • TRIM(BOTH ' ' FROM ' San Bernardino ') — wynik wynosi 'San Bernardino'.

Należy zwrócić uwagę na to, że drugi argument to dwa pojedyncze cudzysłowy, pomiędzy którymi znajduje się znak spacji.

UPPER(<string>)

Zwraca ciąg znakowy, w którym wszystkie znaki są zapisane wielkimi literami.

Przykład

  • UPPER('Sailboat') — wynik wynosi 'SAILBOAT'.

LOWER(<string>)

Zwraca ciąg znakowy, w którym wszystkie znaki są zapisane małymi literami.

Przykład

  • LOWER('Sailboat') — wynik wynosi 'sailboat'.