Skip To Content

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:

    Aby móc używać języka Arcade w obliczeniach, należy włączyć w warstwie możliwość edycji, ale w warstwie tej nie może być włączona synchronizacja. Więcej informacji na temat zmian ustawień edycji i synchronizacji można znaleźć w sekcji Zarządzanie hostowanymi warstwami obiektowymi.

  • 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 dla pola

Wykonaj te czynności w celu obliczenia wartości pól znakowych, liczbowych lub pól daty.

Notatka:
Nie można cofnąć obliczeń wartości pola. Z tego powodu zalecaną praktyką jest 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ę.
    Wskazówka:

    Te czynności można także wykonać w tabeli w aplikacji Map Viewer Classic.

  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 lub metody umożliwiające wykonanie typowych obliczeń w portalu ArcGIS Enterprise.

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

Użycie obliczenia w polu liczbowym (SalesDifference) w celu znalezienia różnicy między wartościami w polach liczbowych Sales2016 i Sales2017.

Sales2016 - Sales2017

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

Korzystanie z filtru w przeglądarce map Map Viewer Classic

Jeśli nie chcesz używać wyrażenia w języku Arcade, możesz zastosować filtr do warstwy na mapie, obliczyć wartości dla obiektów uwzględnionych w filtrze, usunąć filtr, zastosować inny filtr oparty na innej wartości i obliczyć wartości tych pól. Ten temat został opisany w poniższych punktach.

Jeśli na przykład istnieje pole liczbowe, w którym przy użyciu kodów (3, 2 i 1) rejestrowane są typy sklepów i potrzebne jest pole znakowe, które będzie zawierać znakową reprezentację tych kodów (sieć sklepów, franczyza i sklep niezależny), można dodać do warstwy pole znakowe, dodać warstwę do mapy, utworzyć filtr dla każdej wartości kodu i obliczyć wartość pola znakowego.

  1. Dodaj pole znakowe do hostowanej warstwy obiektowej. Skonfiguruj długość odpowiadającą najdłuższemu ciągowi znakowemu, który ma zostać zapisany.

    W przykładzie typu sklepu nazwą nowego pola jest TypeFull.

  2. Na karcie Przegląd strony elementu warstwy kliknij opcję Otwórz w aplikacji Map Viewer Classic.
  3. Zdefiniuj filtr w warstwie, tak aby na mapie widoczne były tylko obiekty tego samego typu.

    W przykładzie dotyczącym sklepu zastosuj filtr, który zwraca tylko te obiekty, dla których wartość w polu StoreCode jest równa 3.

  4. Otwórz tabelę atrybutów dla warstwy.
  5. Kliknij nazwę pola dodanego w etapie 1, a następnie kliknij przycisk Oblicz.

    W tym przykładzie kliknij nazwę TypeFulli kliknij przycisk Oblicz.

  6. Wpisz ciąg znakowy, który ma być wstawiany w tym polu dla tych obiektów. Ujmij ten ciąg znakowy w apostrofy.

    Wpisz ciąg znakowy 'sieć sklepów', aby wypełnić pole TypeFull dla wszystkich obiektów, które w polu StoreCode mają wartość 3.

  7. Kliknij przycisk Oblicz.
  8. Usuń filtr zdefiniowany w etapie 3. Otwórz okno Filtr dla warstwy ponownie i kliknij opcję Usuń filtr.
  9. Powtórz etapy od 3 do 8 dla pozostałych wartości, które należy obliczyć.

    W przykładzie dotyczącym sklepu zdefiniuj filtr dla pola StoreCode o wartości 2 i skonfiguruj wartość pola TypeFull na 'franczyza'. Usuń ten filtr, zdefiniuj nowy filtr dla pola StoreCode o wartości 1 i skonfiguruj wartość pola TypeFull na 'sklep niezależny'.

  10. Po zakończeniu obliczania wartości dla nowego pola zamknij mapę bez jej zapisywania.

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

Korzystanie z filtru w przeglądarce map Map Viewer Classic

W podobny sposób, jak w przypadku wypełniania pola na podstawie wartości w innym polu, można zastosować do warstwy na mapie filtr zwracający wyłącznie obiekty zawierające w polu wartość, która ma zostać zastąpiona. Następnie należy skonfigurować filtrowane pola na nową wartość, aby zaktualizować wartość pól.

Jeśli na przykład konieczne jest poprawienie błędnie wpisanych wartości lub przekształcenie słowa w skrót, należy ustawić filtr na literał znakowy, który ma zostać zmieniony i skonfigurować nową wartość pola.

  1. Dodaj hostowaną warstwę obiektową, która ma zostać zaktualizowana, do przeglądarki map Map Viewer Classic.

    Użytkownik musi być właścicielem warstwy lub administratorem portalu.

  2. Zdefiniuj filtr w warstwie, tak aby na mapie widoczne były tylko obiekty zawierające wartość, która ma zostać zastąpiona.

    Jeśli na przykład znana jest liczba obiektów zawierających w polu StreetType wartości Crt, zastosuj filtr, który zwraca tylko te obiekty, które w polu StreetType mają wartość Crt.

  3. Otwórz tabelę atrybutów dla warstwy.
  4. Kliknij nazwę pola i kliknij przycisk Oblicz.

    W tym przykładzie kliknij pole StreetType i kliknij przycisk Oblicz.

  5. Wpisz ciąg znakowy, który ma być wstawiany w tym polu dla tych obiektów. Ujmij ten ciąg znakowy w apostrofy.

    Wpisz ciąg znakowy 'Ct', aby wypełnić uwzględnione w filtrze pola StreetType poprawionym skrótem słowa Court.

  6. Kliknij przycisk Oblicz, aby zastosować zmiany do filtrowanych pól.
  7. Zamknij mapę bez zapisania.

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

Dodaj czas do pola daty lub odejmij czas od pola daty za pomocą zapytania INTERVAL, jak pokazano w następujących obliczeniach. W pierwszym przykładzie do daty są dodawane trzy dni, aby uzyskać nową datę. W drugim przykładzie od pola znacznika czasu są odejmowane trzy dni.

<DateField> + INTERVAL '3'DAY = updated date
<DateField> - INTERVAL '3 00:00:60' DAY TO SECOND = updated date

Zapytania INTERVAL można używać z następującymi wartościami daty i czasu:

  • DAY
  • HOUR
  • MINUTE
  • SECOND
  • DAY TO HOUR
  • DAY TO MINUTE
  • DAY TO SECOND
  • HOUR TO MINUTE
  • HOUR TO SECOND
  • MINUTE TO SECOND

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

  • Jeśli w warstwie wyświetlanej na mapie zastosowano filtr, obliczone zostaną tylko wartości rekordów spełniających kryteria filtru.
  • 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, hostowanych warstwach obiektowych, które mają powiązane warstwy kafli, hostowanych warstwach obiektów czasowo-przestrzennych ani widokach utworzonych z hostowanych warstw obiektów czasowo-przestrzennych.
  • Podczas obliczania wartości pól obsługiwane są tylko zapytania w standardowym języku SQL.
  • 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

    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 portalu ArcGIS Enterprise.

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 lub data w formacie MM/DD/RRRR hh:mm:ss umieszczona 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.

Sposób przedstawienia zależy od używanej aplikacji klienckiej. W witrynie portalu daty są wyświetlane zgodnie ze strefą czasową przeglądarki.

W następującym przykładzie zwracane są wszystkie wartości w polu inspection_date (Data inspekcji), w których data jest późniejsza niż bieżąca:

inspection_date > CURRENT_DATE

CURRENT_TIMESTAMP

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

Sposób przedstawienia zależy od używanej aplikacji klienckiej. W witrynie portalu czas jest wyświetlany jako czas lokalny przeglądarki.

W tym przykładzie zwracane są wszystkie wartości znacznika czasu w polu appointments wcześniejsze niż bieżąca data i czas (UTC):

appointments < CURRENT_TIMESTAMP

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:44') — 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.

LN(<number>,<decimal_place>)

Logarytm naturalny podanej liczby.

LOG(<number>,<decimal_place>)

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.

TRUNC(<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

  • TRUNC(111.996,2) — zwraca 111,99.
  • TRUNC(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> in <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'in 'Sailboat') — wynik wynosi 5.
  • POSITION('motor'in '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'.