Funciones SQL estandarizadas en ArcGIS Online

ArcGIS Online Online requiere que los desarrolladores usen consultas SQL estandarizadas cuando consultan capas de entidades alojadas. El uso de consultas SQL estandarizadas ayuda a prevenir los ataques por inyección de SQL. Todas las aplicaciones de ArcGIS admiten consultas SQL estándar.

Limitaciones de las consultas estandarizadas

  • Las consultas estandarizadas se aplican a toda la organización; no se pueden deshabilitar para determinadas capas.
  • Las consultas estandarizadas no se admiten en uniones entre espacios de trabajo diferentes.
  • Las subconsultas como una cláusula WHERE, por ejemplo, POP_2010 = (SELECT min(POP_2010) FROM counties, no son compatibles.
  • Las consultas de servicios de base de datos, por ejemplo, Microsoft Azure SQL Database, no son compatibles.

Las funciones SQL son compatibles con ArcGIS Online

Si es un desarrollador de aplicaciones y está utilizando una sintaxis de cláusula WHERE específica de bases de datos, necesitará actualizar las cláusulas WHERE en el código de la aplicación para utilizar la sintaxis SQL común compatible con ArcGIS Online. Las siguientes tablas muestran qué funciones SQL son compatibles y la sintaxis de cada una de ellas. Cuando se utilicen las siguientes sintaxis y funciones en las aplicaciones, ArcGIS Online las convertirá para adaptarlas a la especificación de la base de datos utilizada por la capa de entidades.

Funciones de fecha

FunciónDescripción

CURRENT_DATE()

Devuelve la fecha actual en hora UTC.

El valor que se muestre dependerá del cliente que esté utilizando. En ArcGIS Online, las fechas se muestran en la zona horaria de su organización o perfil.

CURRENT_TIME()

Devuelve la fecha y hora UTC (horas, minutos y segundos) actuales.

El valor que se muestre dependerá del cliente que esté utilizando. En ArcGIS Online, la hora se muestra en la hora local de su organización o perfil.

CURRENT_TIMESTAMP()

Devuelve la fecha y hora UTC (horas, minutos, segundos y milisegundos) actuales.

El valor que se muestre dependerá del cliente que esté utilizando. En ArcGIS Online, la hora se muestra en la hora local de su organización o perfil.

EXTRACT(<unit> FROM <date>)

Devuelve una sola parte (<unit>) del valor especificado para <date>. Entre los valores posibles de <unit> cabe citar year, month, day, hour y minute.

Los siguientes ejemplos extraen diferentes unidades del valor fecha-hora 21/12/2016 15:11:

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

Funciones numéricas

FunciónDescripción

ABS(<number>)

Devuelve el valor absoluto (positivo) del número especificado.

CAST(<number> AS FLOAT | INT)

Convierte un número en otro tipo distinto. FLOAT convierte el número especificado en un doble y INT lo convierte en un entero.

En el primer ejemplo, el número se convierte en un entero. Dado que los números enteros son números exactos, el resultado es 1424. En el segundo ejemplo, un entero se convierte en un flotante, lo que da como resultado un número con decimales, 1424,0

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

CEILING(<number>)

Devuelve el número entero más pequeño que sea mayor o igual al número especificado.

El siguiente ejemplo devuelve 13:

CEILING(12.93)

COS(<number>)

Devuelve el coseno trigonométrico de <number>, que se asume que es un ángulo en radianes.

FLOOR(<number>)

Devuelve el número entero más grande que sea menor o igual al número especificado.

El siguiente ejemplo devuelve 12:

FLOOR(12.93)

LOG(<number>)

El logaritmo natural del número especificado.

LOG10(<number>)

El logaritmo de base 10 del número especificado.

MOD(<number>, <n>)

Devuelve el resto una vez se ha dividido el dividendo (<number>) entre el divisor <n>. Tanto <n> como <number> deben ser de tipo entero.

Los ejemplos incluyen lo siguiente:

  • MOD(10, 4): devuelve 2.
  • MOD(CAST(DBLFIELD AS INT), 4):DBLFIELD es un campo de tipo doble, así que es necesario usar la función CAST para convertir los valores dobles en enteros.

NULLIF(<number>, <value>)

Devuelve null si el número especificado equivale al valor especificado. NULLIF se suele utilizar para evitar errores de división entre cero poniendo <value> a 0.

Siempre que un campo encuentre un campo con valor null en cualquiera de los argumentos, el resultado del cálculo será null.

Por ejemplo, supongamos que necesita calcular un campo doble para que sea TOTALPOP dividido por POP18. Si una función tiene un valor POP18 igual a cero, el cálculo dará como resultado un error de división entre cero. Puede crear un filtro para ocultar registros en los que POP18 es igual a cero y realizar su cálculo. Una forma más rápida de hacerlo sería con NULLIF:

TOTALPOP / NULLIF(POP18, 0): devuelve null si POP18 es igual a cero; de lo contrario, se devuelve el valor de TOTALPOP / POP18.

POWER(<number> , <y>)

Devuelve el valor del número especificado elevado a la potencia especificada (<y>).

El siguiente ejemplo devuelve 32768:

POWER(8,5)

ROUND(<number> , <length>)

Redondea el número especificado a la longitud especificada.

Si utiliza un número positivo para <length>, el número se redondea a la posición decimal a la derecha del punto decimal. Si <length> es un número negativo, el valor de <number> especificado se redondea a la izquierda del punto decimal.

A continuación se exponen algunos ejemplos:

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

SIN(<number>)

Devuelve el seno trigonométrico del valor de <number> especificado, que se asume que es un ángulo en radianes.

TAN(<number>)

Devuelve la tangente del valor de <number> especificado, que se asume que es un ángulo en radianes.

TRUNCATE(<number>,<decimal_place>)

Trunca <number> en el valor especificado para <decimal_place>.

Un valor positivo de <decimal_place> trunca en la posición decimal especificada. Si <decimal_place> es un número negativo, el valor de <number> se trunca a la izquierda del punto decimal.

En el primer ejemplo, los números a la derecha del decimal se truncan para incluir solo dos números, lo que da como resultado el valor 111,99. En el segundo ejemplo, los números a la izquierda del decimal se truncan, lo que da como resultado el valor 100,00.

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

Funciones de cadena

FunciónDescripción

CAST(<string> AS DATE | TIME)

Convierte la cadena en una fecha u hora si el valor de la cadena está en un formato compatible.

Si la cadena tiene el formato "MM/DD/AAAA hh:mm:ss" o "AAAA-MM-DD", puede convertirla en una fecha. Si la cadena tiene el formato «HH:MM:SS», puede convertirla al tipo de datos solo hora (TIME).

Por ejemplo, la cadena siguiente puede convertirse en una fecha:

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

CHAR_LENGTH(<string>)

Devuelve el número de caracteres en la cadena especificada. El resultado es un entero.

Por ejemplo, la siguiente sentencia devuelve 8:

CHAR_LENGTH('Redlands')

CONCAT(<string1>, <string2>)

Concatena dos valores de cadena de caracteres.

Solo se pueden indicar dos cadenas. Para concatenar más de dos cadenas de caracteres, anide funciones CONCAT consecutivas tal como se muestra a continuación.

El primer ejemplo concatena las letras A y B. El segundo ejemplo muestra una función CONCAT anidada para concatenar tres valores de cadena, A, : y B.

  • CONCAT('A', 'B'): devuelve 'AB'.
  • CONCAT('A', CONCAT(':', 'B')): devuelve 'A:B'.

Los valores nulos se convierten en cadenas vacías.

CURRENT_USER

Cuando se incluye la función CURRENT_USER en una consulta, actúa de forma similar a una variable; el nombre de usuario del usuario que accede a la capa de entidades alojadas o a la vista de capa de entidades alojadas se identifica y se utiliza en la consulta.

Por ejemplo, si el usuario planner3 ha iniciado sesión en la organización para acceder a una vista de capa de elementos alojada que contiene la siguiente definición de consulta, únicamente se devolverán al usuario conectado las entidades cuyo campo staffmember contenga el valor planner3:

staffmember=current_user

En el siguiente ejemplo, se almacenan varios valores en el campo staffmember. La siguiente cláusula where encontrará el nombre de usuario actual en el valor de texto del campo staffmember incluso si hay varios nombres de usuario almacenados en el campo:

where=position(current_user in staffmember)>0

POSITION(<substring>, <string>)

Devuelve la posición de la primera ocurrencia de la subcadena especificada en la cadena que usted especifica. Si no se encuentra la subcadena especificada, el resultado es 0.

En el primer ejemplo, el resultado es 5 porque la primera letra (b) de la subcadena (boat) es la quinta letra de la cadena (Sailboat). En el segundo ejemplo, el resultado es 0, porque la subcadena (motor) no está presente en la cadena.

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

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

Devuelve una parte de un valor de cadena; <start> es un índice entero que especifica dónde empiezan los caracteres devueltos y <length> es el número de caracteres que se deben devolver.

Vea los siguientes ejemplos:

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

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

Devuelve una cadena de caracteres en la que se han eliminado todos los espacios anteriores y posteriores de la cadena que usted especifica.

En el siguiente ejemplo, existe un espacio antes y después de la cadena, San Bernardino. La palabra clave BOTH se utiliza para recortar la cadena de espacio (indicada mediante dos comillas simples con un espacio entre ellas) del inicio y el final de la cadena de texto:

TRIM(BOTH ' ' FROM ' San Bernardino ')

De este modo se devuelve la cadena 'San Bernardino'.

UPPER(<string>)

Devuelve una cadena de caracteres en la que todos los caracteres se han convertido en mayúsculas.

En este ejemplo, todas las letras de la cadena Sailboat se convierten a mayúsculas, lo que da como resultado la cadena 'SAILBOAT':

UPPER('Sailboat')

LOWER(<string>)

Devuelve una cadena de caracteres en la que todos los caracteres se han convertido en minúsculas.

En el siguiente ejemplo, se devuelve 'sailboat':

LOWER('Sailboat')