ArcGIS Online требует, чтобы разработчики использовали стандартизированные SQL-запросы при работе с размещенными векторными слоями. Использование стандартизированных SQL-запросов помогает предотвратить SQL-вторжения. Все приложения ArcGIS поддерживают стандартизированные SQL-запросы.
Ограничения стандартизированных запросов
- Стандартизированные запросы применяются ко всей организации и не могут быть отключены для отдельных слоев.
- Стандартизированные запросы не поддерживаются в соединениях между различными рабочими областями.
- Подзапросы, такие как условие where, например, POP_2010 = (SELECT min(POP_2010) FROM counties, не поддерживаются.
- Запросы от сервисов базы данных, например, Microsoft Azure SQL Database, не поддерживаются.
Функции SQL, которые поддерживаются в ArcGIS Online
Если вы разработчик приложений и в настоящее время используете синтаксис условия where, специфичный для базы данных, вам необходимо обновить условия where в коде вашего приложения, чтобы использовать общий синтаксис SQL, поддерживаемый ArcGIS Online. В следующих таблицах приведены поддерживаемые SQL-функции и их синтаксис. При использовании следующих функций и синтаксиса в приложениях, ArcGIS Online конвертирует их в соответствии со спецификациями базы данных, использующейся в векторном слое.
Функции дат
Функция | Описание |
---|---|
CURRENT_DATE() | Возвращает текущую дату в формате времени UTC. Отображаемое значение зависит от используемого вами клиента. В ArcGIS Online даты отображаются в часовом поясе вашей организации или профиля. |
CURRENT_TIME() | Возвращает текущие дату и время в формате UTC (часы, минуты, секунды). Отображаемое значение зависит от используемого вами клиента. В ArcGIS Online время отображается в часовом поясе вашей организации или профиля. |
CURRENT_TIMESTAMP() | Возвращает текущие дату и время в формате UTC (часы, минуты, секунды, миллисекунды). Отображаемое значение зависит от используемого вами клиента. В ArcGIS Online время отображается в часовом поясе вашей организации или профиля. |
EXTRACT(<unit> FROM <date>) | Возвращает одну часть (<unit>) указанного <date>. Возможные значения <unit> включают, в том числе: year, month, day, hour и minute. В следующих примерах извлекаются различные единицы из значения даты и времени 21.12.2021 15:11:
|
Числовые функции
Функция | Описание |
---|---|
ABS(<number>) | Возвращает абсолютное (положительное) значение заданного числа. |
CAST(<number> AS FLOAT | INT) | Конвертирует число в другой тип. FLOAT конвертирует указанное число в значение с двойной точностью, а INT конвертирует в целое число. В первом примере ниже число преобразуется в целое. Поскольку числа являются целыми числами, результатом будет 1424. Во втором примере целое число преобразуется в число с плавающей точкой, что приводит к десятичному числу: 1424.0
|
CEILING(<number>) | Возвращает наименьшее целочисленное значение, большее или равное указанному числу. В следующем примере возвращается 13: CEILING(12.93) |
COS(<number>) | Возвращает тригонометрический косинус <number>, который должно представлять значение угла в радианах. |
FLOOR(<number>) | Возвращает наибольшее целое значение, меньшее или равное указанному числу. В следующем примере возвращается 12: FLOOR(12.93) |
LOG(<number>) | Возвращает натуральный логарифм указанного числа. |
LOG10(<number>) | Десятичный логарифм указанного числа. |
MOD(<number>, <n>) | Возвращает остаток после деления делимого (<number>) на делитель <n>. <n> и <number> должны быть целочисленными. Примеры:
|
NULLIF(<number>, <value>) | Возвращает null, если указанное число равно заданному значению. NULLIF обычно используется, чтобы избежать ошибок деления на ноль в случае, когда для <value> задано 0. Каждый раз, когда в вычислении встречается значение поля null в любом из его аргументов, результатом вычисления будет null. Предположим, вам нужно вычислить поле double, которое TOTALPOP делится на POP18. Если любой объект имеет значение POP18, равное нулю, такое вычисление приведет к ошибке деления на ноль. Вы можете создать фильтр, чтобы скрыть записи, где значение равноPOP18 нулю, а затем выполнить необходимые вычисления. Более легкий способ - использовать NULLIF: TOTALPOP / NULLIF(POP18, 0) – возвращает null, если POP18 равно нулю; в противном случае возвращается значение TOTALPOP / POP18. |
POWER(<number> , <y>) | Возвращает значение указанного числа, возведенное в указанную степень (<y>). В следующем примере возвращается 32768: POWER(8,5) |
ROUND(<number> , <length>) | Округляет число до заданной длины. Если для <length> задано положительное число, оно будет округляться до десятичной позиции справа от разделителя десятичных знаков. Если <length> является отрицательным числом, то указанное <number> округляется с левой стороны от десятичной точки. Примеры приведены ниже:
|
SIN(<number>) | Возвращает тригонометрический синус <number>, который должен представлять значение угла в радианах. |
TAN(<number>) | Возвращает тангенс <number>, который должен представлять значение угла в радианах. |
TRUNCATE(<number>,<decimal_place>) | Сокращает <number> до указанной <decimal_place>. Положительное значение <decimal_place> сокращает до заданной десятичной позиции. Если <decimal_place> является отрицательным числом, то <number> округляется с левой стороны от десятичной точки. Во втором примере числа слева от десятичного места усекаются до двух цифр, что приводит к получению значения 111.99. Во втором примере усекаются числа слева от десятичного разделителя, что приводит к получению значения 100.00.
|
Строковые функции
Функция | Описание |
---|---|
CAST(<string> AS DATE | TIME) | Преобразует строку в дату или время, если строковое значение имеет поддерживаемый формат. Если строка имеет формат 'MM/DD/YYYY hh:mm:ss' или 'YYYY-MM-DD', вы можете преобразовать ее в дату. Если строка имеет формат 'HH:MM:SS', вы можете преобразовать ее в дату формата только время (TIME). Например, следующая строка может быть приведена к дате: CAST('1988-05-30' AS DATE) |
CHAR_LENGTH(<string>) | Возвращает число символов указанного строкового выражения. Результат является целым числом. Например, следующее выражение возвратит 8: CHAR_LENGTH('Redlands') |
CONCAT(<string1>, <string2>) | Соединяет два строковых значения. Могут быть предоставлены только две строки. Чтобы объединить более двух строк, вложите последовательные функции CONCAT, как показано ниже. Первый пример ниже объединяет буквы A и B. Во втором примере показана вложенная функция CONCAT для объединения трех строковых значений: A, : и B.
Значения Null конвертируются в пустую строку. |
CURRENT_USER | Если функция CURRENT_USER включена в запрос, она действует аналогично переменной, а имя пользователя, получившего доступ к размещенному векторному слою или представлению размещенного векторного слоя, определено и используется в запросе. Например, если пользователь planner3 выполнил вход в организацию для доступа к представлению размещенного векторного слоя, который содержит следующее определение запроса, то только объекты, в поле staffmember которых содержится значение planner3, будут возвращены подключенному пользователю: staffmember=current_user В следующем примере несколько значений хранятся в поле staffmember. Следующее выражение where найдет текущее имя пользователя в текстовом значении в поле staffmember, даже если в поле хранятся несколько имен пользователей: where=position(current_user in staffmember)>0 |
POSITION(<substring>, <string>) | Возвращает позицию первого появления подстроки в указанной строке. Если подстрока не найдена, то результат - 0. В первом примере ниже результат - 5, потому что первая буква (b) подстроки (boat) является пятой буквой в строке (Sailboat). Во втором примере результат - 0, потому что подстрока (motor) отсутствует в строке.
|
SUBSTRING(<string>, <start>, <length>) | Возвращает часть значения строки; <start> является целочисленным индексом, который определяет, где начинаются возвращаемые символы, а <length> представляет число символов, которые должны быть возвращены. См. примеры ниже:
|
TRIM(BOTH | LEADING | TRAILING ' ' FROM <string>) | Возвращает строку, в которой все начальные и конечные пробелы удалены. В следующем примере до и после строки есть пробел, San Bernardino. Ключевое слово BOTH используется для удаления пробелов (с использованием двух одинарных кавычек с пробелом между ними) в начала и в конце текстовой строки: TRIM(BOTH ' ' FROM ' San Bernardino ') Будет возвращена строка 'San Bernardino'. |
UPPER(<string>) | Возвращает строку, в которой все символы преобразованы в символы верхнего регистра. В этом примере все буквы строки Sailboat преобразуются в верхний регистр, что приводит к получению строки 'SAILBOAT': UPPER('Sailboat') |
LOWER(<string>) | Возвращает строку, в которой все символы преобразованы в символы нижнего регистра. В следующем примере будет возвращено 'sailboat': LOWER('Sailboat') |