Obliczanie wartości pól

Dzięki obliczeniom wartości pól właściciel hostowanej warstwy obiektowej lub administrator instytucji może zmienić wartości każdego wiersza dla jednego pola w tabeli atrybutów warstwy.

Jeśli na przykład istnieje hostowana warstwa obiektowa przechowująca informacje o sprzedażach nieruchomości — w tym cenę sprzedaży i stawkę podatku dla nieruchomości — można dodać pole do warstwy, aby zapisać szacowane podatki od nieruchomości. Aby zapełnić pole estimated_property_taxes zdefiniuj dla niego wyrażenie obliczeniowe, które pobiera wartości znajdujące się w polu sale_price i mnoży je przez wartości tax_rate.

Istnieją dwie możliwości pisania wyrażeń obliczających wartości pól w warstwach hostowanej warstwy obiektowej:

  • Język ArcGIS Arcade — język Arcade to idealne narzędzie do wykonywania obliczeń wymagających użycia funkcji, których nie ma w języku SQL. Język Arcade zapewnia dostęp do wartości atrybutów i geometrii obiektów, co pozwala na tworzenie wyrażeń uwzględniających operacje przestrzenne. Ponadto w przypadku wystąpienia błędu podczas obliczania konkretnego wiersza można zatrzymać się i rozwiązać problem, a następnie ponownie uruchomić obliczenia.

    Notatka:

    Interfejs ArcGIS API for JavaScript w wersji 3.44 lub nowszej nie otrzyma najnowszych funkcji języka ArcGIS Arcade. Wyrażenia Arcade napisane przy użyciu aplikacji z interfejsem JavaScript API w wersji 3.44 lub nowszej będą obsługiwały tylko funkcje języka Arcade wprowadzone w wersji Arcade 1.21 lub wcześniejszej. Więcej informacji o obsłudze języka Arcade w produktach ArcGIS znajduje się w zestawieniu wersji języka Arcade.

  • Język SQL — użycie języka SQL zapewnia największą wydajność obliczeń, które mogą być wykonane przy użyciu standardowych wyrażeń SQL (SQL-92) zawierających atrybuty o charakterze nieprzestrzennym. Instrukcje SQL można wykonywać w hostowanych warstwach obiektowych i warstwach z włączoną synchronizacją, co pozwala śledzić autorów i użytkowników edytujących obiekty. Możliwości takiej nie dają wyrażenia w języku Arcade wykonywane w tych warstwach.

W następnej sekcji objaśniono sposób obliczania wartości dla pola z poziomu strony elementu hostowanej warstwy obiektowej. W kolejnych sekcjach zaprezentowano przykłady typowych obliczeń.

Obliczanie wartości pola ze strony elementu

Wykonaj poniższe czynności, aby obliczyć wartości pola znakowego, liczbowego lub daty w polu ze strony elementu warstwy obiektowej.

Notatka:

Nie można cofnąć obliczeń wartości pola. Z tego powodu zaleca się dodanie pola, obliczenie w nim wartości i potwierdzenie, że wykonane obliczenia są zgodne z oczekiwaniami. Jeśli tak jest, można następnie obliczyć wartość oryginalnego pola, aby było równe dodanemu polu. Po potwierdzeniu poprawności wartości w oryginalnym polu można usunąć dodane pole.

  1. Na stronie elementu warstwy kliknij kartę Dane, aby wyświetlić tabelę.
  2. Kliknij kolumnę zawierającą wartości, które mają zostać obliczone.
  3. Wykonaj jedną z następujących czynności, aby otworzyć okno dialogowe Oblicz pole:
    • Kliknij przycisk Oblicz.
    • Kliknij opcję Pokaż widok szczegółowy > Oblicz.
  4. Wybierz język, który ma być używany do wykonywania obliczeń: Arcade lub SQL.

    Jeśli w hostowanej warstwie obiektowej włączono synchronizację lub jest ona skonfigurowana w sposób umożliwiający śledzenie użytkowników tworzących i aktualizujących obiekty, strona ta nie zostanie wyświetlona. Zamiast niej zostanie wyświetlone okno języka SQL.

  5. Utwórz wyrażenie obliczeniowe.
    • W przypadku języka SQL należy używać operatorów podstawowych, listy pól oraz funkcji. Kliknij przycisk Sprawdź poprawność, aby upewnić się, że w wyrażeniu nie ma błędów. Jeśli wyrażenie jest niepoprawne, kliknij przycisk Usuń i utwórz nowe wyrażenie. Po utworzeniu i sprawdzeniu wyrażenia kliknij przycisk Oblicz.
    • W wyrażeniach w języku Arcade można używać zmiennych globalnych, funkcji i stałych. Kliknij przycisk OK, aby obliczyć wyrażenie. W przypadku wystąpienia błędu podczas obliczania wyrażenia można kliknąć opcję Przejrzyj błąd, aby otworzyć okno wyrażenia i poprawić błąd. W przeciwnym razie kliknij przycisk Anuluj. Po poprawieniu i ponownym uruchomieniu wyrażenia obliczenia rozpoczynają się od nowa.

Czas potrzebny na wykonanie obliczeń zależy od złożoności wyrażenia i liczby obiektów w warstwie.

Przykładowe obliczenia

Poniższe sekcje zawierają przykładowe składnie umożliwiające wykonanie typowych obliczeń w usłudze ArcGIS Online.

Wykonywanie operacji matematycznej na wartościach liczbowych w dwóch istniejących polach w celu wypełnienia trzeciego pola

Jednym z najbardziej typowych obliczeń jest określenie nowej wartości liczbowej na podstawie istniejących wartości w warstwie obiektowej. Na przykład można odjąć sumy sprzedaży we wszystkich sklepach z jednego roku od sum sprzedaży z innego roku, aby uzyskać zmianę zysku w kolejnych latach lub podzielić łączną liczbę mieszkańców w wieku poniżej 18 lat przez całkowitą wielkość populacji, aby określić ułamek populacji w wieku poniżej 18 lat.

Arcade — przykłady

Obliczanie różnicy wartości dwóch pól liczbowych Sales2016 i Sales2017 w celu zapełnienia pola liczbowego.

$feature.Sales2016 - $feature.Sales2017

Przykłady w języku SQL

Wypełnienie pola liczbowego liczbą dziesiętną będącą wynikiem obliczenia części populacji w wieku poniżej 18 lat.

PopUnder18/TotalPop

Połączenie wartości znakowych z istniejących pól w nowym polu znakowym

Inne obliczenie wypełniające nowe pole, które uwzględnia połączenie wartości z istniejących pól znakowych. Na przykład w przypadku istnienia dwóch pól znakowych reprezentujących lokalizacje pokoi hotelowych — piętro i pokój — można je połączyć w polu znakowym zawierającym oba te numery.

W poniższych przykładach wartości pól piętra i pokoju zostaną połączone w jednym polu.

Przykład użycia interfejsu Arcade

Concatenate($feature.room,$feature.floor)

Przykład w języku SQL

CONCAT(Floor,Room)

Usunięcie spacji na początku lub na końcu pól znakowych

Gdy użytkownicy wpisują lub wklejają wartości podczas edycji pól, mogą popełniać błędy i pozostawiać początkowe lub końcowe spacje w tekście. Błędy te można eliminować, przycinając wartości.

W tych przykładach edytujący dodał końcową spację podczas wklejania tekstu New Hampshire do pola zawierającego nazwy stanów, dlatego należy obciąć spacje na końcu ciągu znakowego.

Przykład użycia interfejsu Arcade

Trim('New Hampshire ')

Przykład w języku SQL

Trim(TRAILING ' ' FROM 'New Hampshire ')

Wypełnianie pola różnymi wartościami w zależności od wartości w innym polu

W niektórych przypadkach wartość, która ma zostać dodana w polu, różni się w zależności od obiektu i zależy od innej wartości tego samego obiektu. Na przykład można dodać do warstwy obiektowej pole znakowe, w którym ma znaleźć się tekst opisujący liczbową lub skróconą wartość znakową w innym polu. Ponieważ interfejs obliczeń języka SQL tego nie obsługuje, do obliczeń tego typu należy używać języka Arcade.

Przykład użycia interfejsu Arcade

W poniższym przykładzie w polu tekstowym warunkowo zapisywane są różne ciągi znakowe — None (Brak), Low (Niski), High (Wysoki) lub Other (Inne) — w zależności od wartości liczbowej znajdującej się w innym polu warstwy (HowMany — Ile).

When(
  $feature.HowMany == 0, "None",
  $feature.HowMany == 1, "Low",
  $feature.HowMany == 2,  "High",
"Other")

Zastępowanie jednej wartości inną

Jeśli potrzebne jest zastąpienie istniejącej wartości inną, na przykład ze względu na zmianę sposobu reprezentowania określonej wartości lub w celu poprawienia błędnie wpisanych wartości, można znaleźć wszystkie istniejące wartości dla pola i zastąpić je nową wartością. Ponieważ interfejs obliczeń języka SQL tego nie obsługuje, do obliczeń tego typu należy używać języka Arcade.

Uwaga:

Obliczenia są natychmiast zapisywane w warstwie obiektowej. Jeśli istniejąca wartość zostanie zastąpiona niepoprawnie, należy ponowić obliczenie, aby przywrócić pierwotną wartość.

Przykład użycia interfejsu Arcade

W tym przykładzie zmieniono brytyjską pisownię słowa (colour) na pisownię amerykańską za pomocą funkcji Replace.

Replace($feature.color, 'colour', 'color')

Określanie gęstości atrybutu liczbowego dla obiektu powierzchniowego

Aby obliczyć gęstość atrybutu w obszarze, należy użyć wyrażenia w języku Arcade, ponieważ niemożliwe jest wykonywanie obliczeń SQL dla pola przestrzennego z poziomu interfejsu obliczeń.

Przykład użycia interfejsu Arcade

W tym przykładzie przedstawiono sposób określania gęstości zaludnienia na obiekt przez podzielenie całkowitej wielkości populacji (TotalPop) przez powierzchnię obiektu poligonowego wyrażoną w milach kwadratowych:

$feature.TotalPop / Area ($feature,
'square-miles')

Wyprowadzanie współrzędnych obiektów punktowych

Za pomocą wyrażeń w języku Arcade można zwrócić współrzędną długości lub szerokości geograficznej dla pól przestrzennych w hostowanej warstwie obiektowej, która zawiera wyłącznie punkty.

Ten typ obliczeń nie jest obsługiwany w przypadku pól przestrzennych z poziomu interfejsu obliczeń.

Przykład użycia interfejsu Arcade

W tym przykładzie obliczane jest pole zawierające współrzędną x każdego punktu w warstwie punktowej za pomocą funkcji Geometry.

Geometry($feature).x

Dodawanie lub odejmowanie czasu od daty

W celu uzyskania zaktualizowanego pola daty może być konieczne dodanie czasu do pola daty bądź do wartości literału daty lub odjęcie czasu od niego. Na przykład można obliczyć datę przyszłej kontroli lub przeglądu, dodając czas do daty.

Przykład użycia interfejsu Arcade

W tym przykładzie za pomocą funkcji DateAdd do daty dodawane jest siedem dni, aby uzyskać datę w kolejnym tygodniu.

var startDate = Date($feature.dateField);
var oneWeekLater = DateAdd(startDate, 7, 'days');
return oneWeekLater;

Przykłady w języku SQL

W celu dodania lub odjęcia czasu od pola daty można używać poniższych obliczeń lub obsługiwanych w języku SQL wartości literału daty. W pierwszym są używane pola daty, a w drugim — wartości literałów daty. Można także używać pól liczbowych i literałów liczbowych. Obsługiwana jest dowolna kombinacja pól i literałów, co przedstawiono w trzecim i czwartym obliczeniu.

<DateField> +/- <NumberField> = updated date
DATE'<SQL-supported Date Literal>'  +/- <Number of Days> = updated date
<DateField> +/- <Number of Days> = updated date
DATE'<SQL-supported Date Literal >'  +/- <NumberField> = updated date

Obliczone pole daty to oryginalna data zwiększona lub pomniejszona o liczbę dni, które mają zostać dodane lub odjęte. Liczba dni może być liczbą całkowitą lub ułamkową — na przykład 1,5 oznacza półtora dnia, czyli 36 godzin.

W poniższym przykładzie część urządzenia jest instalowana 6/14/2016 o godzinie 10:00. Można użyć dowolnego z obliczeń w celu uzyskania daty kontroli przypadającej miesiąc (30 dni) po tej dacie instalacji. W pierwszym obliczeniu jest używane pole daty z wartością 6/14/2016 i pole liczbowe z wartością 30, a w drugim obliczeniu używany jest literał daty i literał liczbowy.

<MyDateField> + <MyNumberField> = 7/14/2016 10:00 AM
DATE'6/14/2016' + 30 = 7/14/2016 10:00 AM

Obliczanie różnicy między dwiema datami

Czasami konieczne jest obliczenie czasu między dwoma datami. Na przykład jeśli podana jest data instalacji liczników prądu oraz data kontroli, można obliczyć różnicę między tymi dwiema datami i sprawdzić, czy okres od instalacji do kontroli jest zgodny z przepisami. Wynikiem obliczenia jest pole liczbowe, a nie pole daty.

Przykład użycia interfejsu Arcade

W poniższym przykładzie za pomocą funkcji DateDiff obliczany jest wiek danej osoby przez obliczenie różnicy między datą bieżącą (endDate) a datą urodzenia tej osoby (startDate):

var startDate = Date($feature.startDateField);
var endDate = Date($feature.endDateField);
var age = DateDiff(endDate, startDate, 'years');
return age;

Przykłady w języku SQL

Do obliczania czasu między dwiema datami można użyć dowolnej kombinacji pól daty i literałów daty. W pierwszym obliczeniu poniżej jest używane pole daty, a w drugim — literał daty. W trzecim i czwartym obliczeniu używane jest pole daty i literał daty.

<DateField1> - <DateField2> = number of days in between
DATE'<SQL-supported Date Literal>' - DATE'< SQL-supported Date Literal>' = number of days in between
<DateField1> - DATE'<SQL-supported Date Literal>' = number of days in between
DATE'<SQL-supported Date Literal>' - <DateField2>  = number of days in between

Wynikiem jest pole liczbowe obliczane przez odjęcie jednego pola lub literału daty od drugiego pola lub literału. Wynik liczbowy (w dniach) może być liczbą całkowitą lub ułamkową — na przykład 1,5 oznacza półtora dnia, czyli 36 godzin.

W przykładzie z licznikami prądu przytoczonym powyżej można użyć dowolnych z poniższych obliczeń w celu obliczenia czasu między datą instalacji 6/1/2015 i datą kontroli 10/1/2015. W pierwszym obliczeniu używane są pola daty, w drugim literały daty, a w trzecim i czwartym są używane zarówno pole daty, jak i literał daty.

<InspectionDateField> - <InstallationDateField> = 122 (days)
DATE'10/1/2015' - DATE'6/1/2015' = 122 (days)
<InspectionDateField> - DATE'6/1/2015' = 122 (days)
DATE'10/1/2015' - <InstallationDateField> = 122 (days)

Uwagi dotyczące obliczania wartości pól

  • W przypadku obliczania wartości warstwy w przeglądarce Map Viewer Classic i zastosowania filtra w warstwie obliczone zostaną tylko wartości rekordów spełniających kryteria filtra.
  • Podczas pisania wyrażeń SQL funkcja Oblicz pole obsługuje wyłącznie nazwy pól, a nie ich aliasy. Na liście Pola wyświetlane są wszystkie nazwy pól, dla których można obliczyć wartość. Tę listę można filtrować według typów pól: Znakowe, Numeryczne oraz Data.
    • Po umieszczeniu kursora na nazwie pola widocznej na liście Pola wyświetlone zostają alias pola oraz typ pola.
    • Kliknięcie nazwy pola widocznej na liście Pola powoduje dodanie pola do wyrażenia.
  • Nie można obliczać wartości pól w kopiach hostowanych warstw obiektowych ani dla hostowanych warstw obiektowych, które mają powiązane warstwy kafli.
  • Obliczone wartości nie są przekazywane z hostowanej warstwy obiektowej lub widoku do zależnych hostowanych warstw scen.
  • Dla liczb w wyrażeniach SQL nie jest obsługiwane ustawienie Formatowanie według ustawień regionalnych. Jeśli na przykład ustawienia regionalne skonfigurowano dla Hiszpanii, należy jako separatora miejsca dziesiętnego w wartościach tabeli atrybutów użyć kropki, a nie przecinka.
  • Nie można używać funkcji liczbowej MOD dla pól typu liczba zmiennoprzecinkowa podwójnej precyzji. Takie pole należy przekształcić na typ liczba całkowita, jak pokazano w przykładzie.
  • Nie można pisać wyrażeń w języku Arcade dla hostowanych warstw obiektowych z włączoną synchronizacją lub warstw, w których skonfigurowano możliwość śledzenia użytkowników tworzących i aktualizujących obiekty.
  • Nie można używać języka Arcade do obliczania wartości następujących typów danych terenowych na stronie elementu warstwy obiektowej:
    • Duże liczby całkowite
    • Tylko data
    • Tylko czas
    • Przesunięcie datownika

    Notatka:

    Gdy jakakolwiek warstwa w hostowanej warstwie obiektowej zawiera te typy danych, obliczenia w języku Arcade są wyłączane dla całej hostowanej warstwy obiektowej, nawet tych warstw podrzędnych, które nie zawierają nieobsługiwanych typów danych.

Informacje na temat standardowego języka SQL (SQL-92)

Tworząc wyrażenia SQL do obliczania wartości pól, należy używać standardowego języka SQL. Ta sekcja zawiera listę operatorów i funkcji języka SQL, których można użyć do obliczeń SQL w usłudze ArcGIS Online.

Po utworzeniu wyrażenia SQL kliknij przycisk Oblicz. Jeśli wystąpiły jakiekolwiek błędy, u dołu okna dialogowego wyświetlony zostanie odpowiedni komunikat. Popraw składnię wyrażenia i oblicz ponownie.

Operatory

Okno dialogowe Oblicz pole umożliwia budowanie prostych wyrażeń w języku SQL przy użyciu operatorów, takich jak plus, minus, znak mnożenia oraz dzielenia. Przykłady i wskazówki dotyczące korzystania z tych operatorów są następujące:

  • Aby pomnożyć wszystkie wartości w polu numerycznym o nazwie SAMPLE przez wartość 100,0, wprowadź wyrażenie SAMPLE * 100.0.
  • W przypadku bardziej skomplikowanych równań można skorzystać z nawiasów, aby podać kolejność wykonywania działań, na przykład SAMPLE * (BASELINE – 40).
  • Operatorów matematycznych nie można stosować z polami znakowymi. Konieczne jest skorzystanie z funkcji ciągów opisanych w sekcji Funkcje ciągów znakowych.
  • Jeśli wartość pola typu liczba zmiennoprzecinkowa podwójnej precyzji zostanie obliczona w polu typu liczba całkowita, do wyrażenia może zostać automatycznie dodana funkcja CAST. Na przykład: podczas obliczania wartości pola typu liczba zmiennoprzecinkowa podwójnej precyzji o nazwie POP w polu typu liczba całkowita o nazwie SAMPLE wyrażenie zostanie wyświetlone w postaci CAST(SAMPLE AS FLOAT). Nie należy usuwać funkcji CAST. Informacje na temat funkcji CAST można znaleźć w sekcji Funkcje numeryczne znajdującej się poniżej.
  • Aby do ciągu znakowego dołączyć apostrof, użyj dwóch cudzysłowów pojedynczych. Na przykład 'Nightingale''s'. Nie używaj podwójnych cudzysłowów.

Funkcje

Oprócz prostych wyrażeń zawierających operatory do budowania wyrażeń w języku SQL można również używać funkcji. Funkcje obsługują nazwy pól, literały oraz inne funkcje. Na przykład: użytkownik chce obliczyć wartość pola zmiennoprzecinkowego podwójnej precyzji jako TOTALPOP podzielone przez POP18. Jeżeli dla dowolnego obiektu wartość pola POP18 jest równa zero, obliczenie nie zostanie wykonane i wyświetlony zostanie komunikat o błędzie dzielenia przez zero. Aby zapobiec wystąpieniu tego typu błędu, można skorzystać z funkcji NULLIF opisanej poniżej. Po jej zastosowaniu wyrażenie miałoby postać TOTALPOP / NULLIF(POP18, 0).

Funkcje przyjmują argumenty. W poniższej tabeli każdy z argumentów może być jednym z następujących elementów:

  • Nazwa pola — typ pola musi być zgodny z typem argumentu (ciąg znakowy, liczba lub data).
  • Literał — na przykład 'Zaglowka' (ciąg znakowy umieszczony w pojedynczych cudzysłowach), liczba 5, data w formacie MM/DD/RRRR hh:mm:ss lub RRRR-MM-DD albo czas w formacie HH:MM:SS w pojedynczych cudzysłowach.
  • Funkcja zwracająca wartość odpowiedniego typu (ciąg znakowy, liczba lub data). Na przykład funkcja FLOOR(POWER(SAMP_ERR, 0.5)) zwraca największą liczbę całkowitą, która jest równa wartości pierwiastka kwadratowego z wartości pola SAMP_ERR (lub mniejsza).

Ze względów demonstracyjnych przykłady przedstawione w kolumnie z opisem w poniższych tabelach przyjmują argumenty w postaci literałów. Dla tych argumentów można również użyć nazwy pola lub innej funkcji.

Funkcje daty

Na polach dat można wykonywać kilka rodzajów obliczeń. Na przykład można dodawać lub odejmować czas od pola daty albo obliczać różnicę między dwoma polami daty.

Przed rozpoczęciem pracy z polami daty należy zapoznać się z tymi ważnymi uwagami.

Podczas obliczania pól daty można użyć dowolnej kombinacji pól daty i pól liczbowych oraz literałów. W przypadku korzystania z literałów daty konieczne jest używanie formatów daty obsługiwanych przez SQL.

Dostępne są następujące funkcje daty:

FunkcjaOpis

CURRENT_DATE()

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

Wyświetlana wartość zależy od używanego klienta. 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).

Wyświetlana wartość zależy od używanego klienta. 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).

Wyświetlana wartość zależy od używanego klienta. 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 year, month, day, hour i minute.

W poniższych przykładach wyodrębniane są różne jednostki z wartość daty i godziny 21.12.2016 15:11:

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

Funkcje liczbowe

FunkcjaOpis

ABS(<number>)

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

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ą.

W pierwszym przykładzie poniżej liczba jest rzutowana na liczbę całkowitą. Z tego względu wynikiem jest 1424. W drugim przykładzie liczba całkowita jest rzutowana na liczbę zmiennoprzecinkową, a wynikiem jest liczba z miejscami po przecinku: 1424,0

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

CEILING(<number>)

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

W następującym przykładzie zwracana jest wartość 13:

CEILING(12.93)

COS(<number>)

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

FLOOR(<number>)

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

W następującym przykładzie zwracana jest wartość 12.

FLOOR(12.93)

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>).

W następującym przykładzie zwracana jest wartość 32 768.

POWER(8,5)

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 prawej stronie przecinka dziesiętnego. W przypadku gdy liczba <length> jest ujemna, podana wartość <number> jest zaokrąglana po lewej stronie przecinka dziesiętnego.

Poniżej podano 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.

W pierwszym przykładzie obcinane są cyfry po prawej stronie przecinka dziesiętnego, tak aby uwzględniane były tylko dwie cyfry, w związku z czym wyświetlana jest wartość 111,99. W drugim przykładzie obcinane są cyfry z lewej strony przecinka dziesiętnego, w związku z czym wyświetlana jest wartość 100,00.

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

Funkcje ciągów znakowych

FunkcjaOpis

CAST(<string> AS DATE | TIME)

Przekształca ciąg znakowy na datę lub czas, jeśli wartość ciągu znakowego jest w obsługiwanym formacie.

Jeśli ciąg znakowy jest w formacie 'MM/DD/RRRR hh:mm:ss' lub 'RRRR-MM-DD', można przekształcić go w datę. Jeśli ciąg znakowy jest w formacie 'HH:MM:SS', można przekształcić go w typ danych obsługujący tylko czas (TIME).

Na przykład następujący ciąg znakowy można przekształcić w datę:

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

CHAR_LENGTH(<string>)

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

Na przykład następująca instrukcja zwraca wartość 8:

CHAR_LENGTH('Redlands')

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.

W pierwszym przykładzie poniżej łączone są litery A i B. W drugim przykładzie przedstawiono zagnieżdżoną funkcję CONCAT, która łączy trzy wartości znakowe: A, : i B.

  • 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.

CURRENT_USER

Gdy w zapytaniu jest zawarta funkcja CURRENT_USER., działa ona podobnie do zmiennej; nazwa użytkownika uzyskującego dostęp do hostowanej warstwy obiektowej lub widoku hostowanej warstwy obiektowej jest identyfikowana i używana w zapytaniu.

Jeśli na przykład użytkownik planner3 jest użytkownikiem zalogowanym w instytucji, aby uzyskać dostęp do widoku hostowanej warstwy obiektowej zawierającego następującą definicję zapytania, tylko obiekty, dla których pole staffmember zawiera wartość planner3, są zwracane do użytkownika nawiązującego połączenie:

staffmember=current_user

W następnym przykładzie w polu staffmember jest przechowywane wiele wartości. Następująca klauzula where powoduje znalezienie nazwy bieżącego użytkownika w wartości tekstowej w polu staffmember, nawet jeśli w tym polu przechowywane jest wiele nazw użytkowników:

where=position(current_user in staffmember)>0

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.

W pierwszym przykładzie poniżej wynikiem jest 5, ponieważ pierwsza litera (b) podciągu (boat) jest piątą literą w ciągu znakowym (Sailboat). W drugim przykładzie wynikiem jest 0, ponieważ podciąg (motor) nie występuje w ciągu znakowym.

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

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.

Zobacz następujące 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.

W poniższym przykładzie przed i po ciągu znakowym San Bernardino znajduje się spacja. Słowo kluczowe BOTH jest używane do usuwania ciągu spacji (wskazywanego za pomocą dwóch pojedynczych cudzysłowów ze spacją między nimi) na początku i końcu ciągu tekstowego:

TRIM(BOTH ' ' FROM ' San Bernardino ')

Zwracany jest ciąg znakowy 'San Bernardino'.

UPPER(<string>)

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

W tym przykładzie wszystkie litery w ciągu znakowym Sailboat są przekształcane w wielkie litery, czego wynikiem jest ciąg znakowy 'SAILBOAT':

UPPER('Sailboat')

LOWER(<string>)

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

W następnym przykładzie zwracany jest ciąg znakowy 'sailboat':

LOWER('Sailboat')