Sintaxis SQL

Notas sobre palabras clave

Un bloque SQL puede contener varias cláusulas separadas por punto y coma ";".


Los bloques individuales se pueden utilizar para realizar las siguientes tareas con las siguientes palabras clave:

  1. Borrar selección: CLEAR SELECTION
  2. Establecer una variable escalar: LET
  3. Establecer una variable de lista: LIST
  4. Seleccionar objetos: SELECT
  5. Anular la selección de objetos (es decir, eliminar objetos de la selección): DESELECT
  6. Suprimir objetos: DELETE
  7. Cambiar los valores de los campos o variables: SET y UPDATE
  8. Generar una tabla de valores que se puede mostrar en una tabla o generar en un archivo CSV: SELECT

Con la excepción de los tres primeros:


Ahora vamos a proporcionar más información sobre las palabras clave:
  1. Borrar la selección

    Para borrar la selección, utilice la cláusula

    CLEAR SELECTION


  2. Establecer una variable escalar

    Para establecer una variable escalar, utilice la palabra clave LET, por ejemplo:

    LET <variable name> = <value>


  3. Establecer una variable de lista

    Para establecer una variable de lista, utilice la palabra clave LIST, por ejemplo:

    LIST <variable name> = <value 1>, <value 2>, <value 3>, <value n>


  4. Seleccionar objetos

    Para seleccionar objetos, utilice la palabra clave SELECT, por ejemplo

    SELECT
    SELECT ALL
    SELECT SELECTED
    SELECT
     FROM pipe
    SELECT ALL 
     FROM pipe
    SELECT SELECTED 
     FROM pipe
    SELECT 
     WHERE x > 0
    SELECT ALL 
     WHERE x > 0
    SELECT SELECTED 
     WHERE x > 0
    SELECT 
     FROM pipe 
     WHERE diameter > 250
    SELECT ALL 
     FROM pipe 
     WHERE diameter > 250
    SELECT SELECTED 
     FROM pipe 
     WHERE diameter > 250

    Si va a realizar la selección en la tabla activa con el modo de selección activa, la palabra clave SELECT se puede omitir, por ejemplo.

    x > 0


  5. Anular selección de objetos

    Para anular la selección de objetos, utilice la palabra clave DESELECT

    DESELECT
    DESELECT ALL
    DESELECT SELECTED
    DESELECT 
     FROM pipe
    DESELECT ALL 
     FROM pipe
    DESELECT SELECTED 
     FROM pipe
    DESELECT 
     WHERE x > 0
    DESELECT ALL 
     WHERE x > 0
    DESELECT SELECTED 
     WHERE x > 0
    DESELECT 
     FROM pipe 
     WHERE diameter > 250
    DESELECT ALL 
     FROM pipe 
     WHERE diameter > 250
    DESELECT SELECTED 
     FROM pipe 
     WHERE diameter > 250


  6. Suprimir objetos

    Para suprimir objetos, utilice la palabra clave DELETE

    DELETE
    DELETE ALL
    DELETE SELECTED
    DELETE 
     FROM pipe
    DELETE ALL 
     FROM pipe
    DELETE SELECTED 
     FROM pipe
    DELETE 
     WHERE x > 0
    DELETE ALL 
     WHERE x > 0
    DELETE SELECTED 
     WHERE x > 0
    DELETE 
     FROM pipe 
     WHERE diameter > 250
    DELETE ALL 
     FROM pipe 
     WHERE diameter > 250
    DELETE SELECTED 
     FROM pipe 
     WHERE diameter > 250


  7. Cambiar el valor de los campos o variables

    Para cambiar el valor de los campos o variables, utilice la palabra clave SET. Es posible establecer más de un valor a la vez separando las asignaciones con comas ",".

    SET 
      x = x – 100, 
      y = y – 100
    SET 
      x = x – 100, 
      y = y – 100 
     WHERE ground_level > 20


    Para modificar la tabla activa y el modo de selección activo, se debe utilizar la palabra clave UPDATE

    UPDATE ALL SET 
      x = x – 100, 
      y = y - 100
    UPDATE SELECTED SET 
      x = x – 100, 
      y = y - 100
    UPDATE node SET 
      x = x – 100, 
      y = y - 100
    UPDATE ALL node SET 
      x = x – 100, 
      y = y - 100
    UPDATE SELECTED node SET 
      x = x – 100, 
      y = y – 100
    UPDATE ALL SET 
      x = x – 100, 
      y = y – 100 
     WHERE ground_level > 20
    UPDATE SELECTED SET 
      x = x – 100, 
      y = y – 100 
     WHERE ground_level > 20
    UPDATE node SET 
      x = x – 100, 
      y = y - 100 
     WHERE ground_level > 20
    UPDATE ALL node SET 
      x = x – 100, 
      y = y – 100
     WHERE ground_level > 20
    UPDATE SELECTED node SET 
      x = x – 100, 
      y = y – 100 
     WHERE ground_level > 20


  8. Generar una tabla de valores

    Para seleccionar un número de valores, utilice la palabra clave SELECT y, a continuación, sígalo con los valores que desea que se muestren separados por comas, por ejemplo

    SELECT 
      node_id, 
      MAX(us_links.conduit_width), 
      MIN(us_links.conduit_width)


    Es posible modificar el título dado a la columna en la tabla o en el archivo CSV utilizando la palabra clave AS, por ejemplo

    SELECT 
      node_id AS title, 
      MAX(us_links.conduit_width) AS mymax, 
      MIN(us_links.conduit_width) AS mymin


    El título puede estar sin comillas, en cuyo caso no puede haber espacios ni caracteres no alfanuméricos, ni comillas, por ejemplo

    SELECT 
      node_id AS title, 
      MAX(us_links.conduit_width) AS mymax, 
      MIN(us_links.conduit_width) AS '£% my min'


    Es posible modificar la tabla utilizando la palabra clave FROM, por ejemplo

    SELECT 
      node_id AS title, 
      MAX(us_links.conduit_width) AS mymax, 
      MIN(us_links.conduit_width) AS mymin 
     FROM node


    Los resultados se mostrarán en una tabla a menos que se especifique un archivo mediante las palabras clave INTO FILE, por ejemplo:

    SELECT 
      node_id AS title, 
      MAX(us_links.conduit_width) AS mymax, 
      MIN(us_links.conduit_width) AS mymin 
     FROM node 
     INTO FILE 'c:\temp\mynodes.csv'


    Es posible filtrar los objetos sobre los que se informará mediante la palabra clave WHERE, por ejemplo:

    SELECT 
      node_id AS title, 
      MAX(us_links.conduit_width) AS mymax, 
      MIN(us_links.conduit_width) AS mymin 
     FROM node 
     WHERE MAX(us_links.conduit_width) > 450


    Es posible calcular resultados agregados sobre grupos de objetos utilizando la palabra clave GROUP BY, por ejemplo:

    SELECT 
      MAX(MAX(us_links.conduit_width)) 
     GROUP BY system_type


    Es posible limitar los resultados de los agregados notificados mediante la palabra clave HAVING, por ejemplo:

    SELECT 
      MAX(MAX(us_links.conduit_width)) 
     GROUP BY system_type 
     HAVING MAX(MAX(us_links.conduit_width)) < 1000


Sintaxis SQL admitida

En la tabla siguiente se muestra la sintaxis SQL admitida en este producto de Autodesk. A continuación, se pueden encontrar notas adicionales.

Consulte el documento técnico SQL en InfoWorks WS Pro para obtener información completa sobre el uso de SQL y todas las funciones admitidas.

Texto del comentario

El texto del comentario se omite cuando se ejecuta la consulta. Los comentarios pueden especificarse por línea (donde toda la línea después de la sintaxis del comentario se trata como texto de comentario) o por bloque (donde un bloque puede especificarse como parte de una línea, hasta abarcar varias líneas). El texto del comentario se resalta sintácticamente en verde en el cuadro de diálogo SQL.

Sintaxis Descripción
// Comentario de línea
/* Comentario de bloque: inicio del bloque de texto de comentario
*/ Comentario de bloque: final del bloque de texto de comentario

Funciones

Sintaxis Descripción

INT(number)

Parte entera de un número.

FLOOR(number)

Entero más cercano menor o igual que el parámetro.

CEIL(number)

Entero más cercano mayor o igual que su parámetro.

FIXED(number to convert, number of decimal places) Dado un número y un número de decimales entre 0 y 8, convierta el número en una cadena con ese número de decimales, redondeando hacia arriba o hacia abajo según corresponda. Si el número de decimales es 0, la cadena no tendrá ningún separador decimal.

ABS(x)

Toma el valor absoluto de x.

Por ejemplo:

La función devuelve x si x >= 0, -x de lo contrario:

LEFT(s,n)

Devuelve los primeros n caracteres de la cadena s, o la cadena completa si n es mayor que la longitud de la cadena

RIGHT(s,n)

Devuelve los últimos n caracteres de la cadena s, o la cadena completa si n es mayor que la longitud de la cadena

MID(s,n,m)

Devuelve la subcadena de la cadena s que contiene m caracteres que comienzan en la posición n, contando desde 1 como posición de inicio

LEN(s)

Devuelve la longitud de la cadena s

IIF(x,y,z)

Si la expresión x es verdadera entonces devuelve yen los demás casos devuelve z

NVL(x,y) Si x es nula entonces devuelve yen los demás casos devuelve x

SUBST(s1,s2,s3)

Reemplaza la primera instancia de la cadena s2 en la cadena s1 con la cadena s3.

Por ejemplo:

SUBST(node_id,'01','ND')

se aplica al ID de nodo "01880132" y devuelve "ND880132"

GSUBST(s1,s2,s3)

Reemplaza todas las instancias de la cadena s2 en la cadena s1 con la cadena s3.

Por ejemplo:

GSUBST(node_id,'01','ND')

se aplica al ID de nodo "01880132" y devuelve "ND88ND32"

GENSUBST(s,regexp,format)

Reemplaza la cadena s con el formato definido si la expresión regular regxp coincide con la cadena s, de lo contrario devuelve la cadena s sin cambios.

Por ejemplo:

GENSUBST(node_id,'(01)(..)(..)(.*)','ND\2\4a\1')

se aplica al nodo "01880132", devuelve "ND8832a01"

Nota:
  • La expresión regular se puede utilizar para dividir la cadena en subexpresiones mediante paréntesis.
  • En el ejemplo anterior, '(01)(...)(...)(.*)' coincide con cualquier ID de nodo de al menos 6 caracteres que empiecen por 01. El primero (...) corresponde a los caracteres tercero y cuarto de la cadena, el segundo (...) al quinto y sexto y (.*) al resto de la cadena.
  • Si hay coincidencia, se devuelve una cadena en el formato definido; en este caso, \1 representa los valores de la primera subexpresión entre paréntesis '01', \2 representa los valores de la segunda subexpresión entre paréntesis (...) - '88', etc., hasta \9.
Consejo: Las expresiones regulares son potentes y se puede hacer mucho más con ellas que con los ejemplos proporcionados aquí. Para obtener más información sobre las expresiones regulares y su sintaxis, consulte este artículo en Wikipedia.
NL()

Devuelve un carácter de nueva línea.

Por ejemplo, para configurar un campo de nota de tres líneas:

SET notes = 'Set' + NL() + 'new' + NL() + 'line'

YEARPART(s)

YEARPART se aplica a/devuelve el año de una fecha. Si la fecha es 24/09/2024 (suponiendo el formato DD/MM/AAAA), YEARPART es 2024.

Nota: las funciones YEARPART, MONTHPART y DAYPART funcionan en campos de fecha y campos de cadena con formato de fecha. Se devuelve un cero si la cadena a la que se aplican no es una fecha.

MONTHPART(s)

MONTHPART se aplica a/devuelve el mes de una fecha. MONTHPART es 09 si tomamos el ejemplo anterior.

Nota: las funciones YEARPART, MONTHPART y DAYPART funcionan en campos de fecha y campos de cadena con formato de fecha. Se devuelve un cero si la cadena a la que se aplican no es una fecha.

DAYPART(s)

DAYPART se aplica a/devuelve el día de una fecha. En el ejemplo anterior, DAYPART es 24.

Nota: las funciones YEARPART, MONTHPART y DAYPART funcionan en campos de fecha y campos de cadena con formato de fecha. Se devuelve un cero si la cadena a la que se aplican no es una fecha.

NOW()

Función sin ningún parámetro que defina el presente. Esta función examina la fecha y la hora del equipo, de modo que las consultas SQL con NOW no se deben volver a escribir cada vez antes de ejecutarlas para que sean actuales.

DATEPART(date)

DATEPART devuelve la parte de fecha como una fecha (por ejemplo, elimina los minutos de las fechas).

TIMEPART(date)

TIMEPART devuelve la parte de hora de una fecha como un número de minutos después de medianoche.

YEARSDIFF(from,to)

YEARSDIFF devuelve el número de años completos entre dos fechas.

Nota: Las funciones YEARSDIFF, MONTHSDIFF y DAYSDIFF ignoran cualquier parte de los minutos de las fechas en cuestión.

MONTHSDIFF(from,to)

MONTHSDIFF devuelve el número de meses completos entre dos fechas.

Nota: Las funciones YEARSDIFF, MONTHSDIFF y DAYSDIFF ignoran cualquier parte de los minutos de las fechas en cuestión.

DAYSDIFF(from,to)

DAYSDIFF devuelve el número de días completos entre dos fechas.

Nota: Las funciones YEARSDIFF, MONTHSDIFF y DAYSDIFF ignoran cualquier parte de los minutos de las fechas en cuestión.

INYEAR(date,number)

INYEAR devuelve verdadero si la fecha es el año dado como un número.

Nota: Si alguno de los parámetros de las funciones INYEAR, INMONTH, INYEARS e INMONTHS no son números, la función devolverá false. Si el número no es un entero, se redondea al entero más cercano.

INMONTH(date,month,year)

INMONTH devuelve verdadero si la fecha está en el mes y año dados como números.

Nota: Si alguno de los parámetros de las funciones INYEAR, INMONTH, INYEARS e INMONTHS no son números, la función devolverá false. Si el número no es un entero, se redondea al entero más cercano.

INYEARS(date,startyear,endyear)

INYEARS devuelve verdadero si la fecha se encuentra en un año entre los años inicial y final inclusive.

Nota: Si alguno de los parámetros de las funciones INYEAR, INMONTH, INYEARS e INMONTHS no son números, la función devolverá false. Si el número no es un entero, se redondea al entero más cercano.

INMONTHS(date,startmonth,startyear,endmonth,endyear)

INMONTHS devuelve verdadero si la fecha se encuentra entre el mes inicial del año inicial y el mes final del año final inclusive.

Nota: Si alguno de los parámetros de las funciones INYEAR, INMONTH, INYEARS e INMONTHS no son números, la función devolverá false. Si el número no es un entero, se redondea al entero más cercano.

ISDATE(putative_date)

Si el campo es una fecha porque proviene de la base de datos, devuelve true, si es una cadena, devuelve true si se puede convertir en una fecha, de lo contrario, devuelve false.

MONTHYEARPART(date)

MONTHYEARPART devuelve la cadena "<month>/<year>".

YEARMONTHPART(date)

YEARMONTHPART devuelve la cadena "<year>/<date>".

MONTHNAME(date)

MONTHNAME devuelve el nombre del mes (en la configuración regional activa)

SHORTMONTHAME(date)

SHORTMONTHNAME devuelve el nombre abreviado del mes (según lo determine la configuración regional y cómo lo abrevia Windows).

DAYNAME(date)

DAYNAME devuelve el nombre del día (en la configuración regional activa).

SHORTDAYNAME(date)

SHORTDAYNAME devuelve el nombre abreviado del día (según lo determine la configuración regional y cómo lo abrevia Windows).

NUMTOMONTHNAME(n) Devuelve el nombre de mes dado un entero entre 1 y 12.
NUMTOSHORTMONTHNAME(n) Devuelve la versión corta de un nombre de mes (p. ej., ENE) dado un entero entre 1 y 12.
TODATE(year,month,day) Devuelve la fecha especificada como enteros para el año, el mes y el día.
TODATETIME(year,month,day,hours,minutes) Devuelve la fecha especificada como enteros para el año, el mes y el día.

Funciones de lista

El propósito de estas funciones es dividir valores en rangos, valores de puntuación, asignar valores en listas, etc.

Sintaxis Descripción

AREF(n,lista)

AREF, dada una variable de lista lista y un número desde 1 hasta la longitud de lista, devuelve el nth elemento en la lista.

LEN(list variable)

LEN devuelve el número de elementos de una variable de lista.

RINDEX(expression, list variable)

RINDEX es una función que solo se puede utilizar si la lista está ordenada. El propósito de la función RINDEX es, esencialmente, dividir los valores en "contenedores".

LOOKUP(expression, list variable)

Si hay n elementos de la lista y el valor de la expresión está comprendido entre 1 y n incluidos, LOOKUP devolverá el elemento adecuado de la lista.

MEMBER(expression, list variable)

MEMBER devuelve verdadero si el valor de la expresión es uno de los valores de la lista; en caso contrario, devuelve falso.

INDEX(expression, list variable)

Si el resultado de la expresión es el primer valor de la lista, INDEX devolverá 1, si es el valor del segundo, devolverá 2, si el resultado de la expresión no es la lista, devolverá 1.

TITLE(n,lista)

TITLE proporciona títulos para los "contenedores" cuando RINDEX se utiliza para dividir valores en varios rangos.

Funciones matemáticas

Sintaxis Descripción

LOG(x)

Calcula el registro (base 10) de x.

LOGE(x)

Calcula el registro (base e) de x.

EXP(x)

Calcula ex.

SIN(x)

Calcula el seno de x.

COS(x)

Calcula el coseno de x.

TAN(x)

Calcula la tangente de x.

ASIN(x)

Calcula el seno inverso de x.

ACOS(x)

Calcula el coseno inverso de x.

ATAN(x)

Calcula la tangente inversa de x.

ATAN2(x,y)

Calcula la tangente inversa de x / y usando los signos de x and y para determinar el cuadrante.

GAMMALN(x)

Devuelve el registro (base e) de la función gamma de x.

Funciones de agregado

Las funciones de agregado se utilizan para permitir el cálculo de valores basados en:

  • todas las filas de un campo de matriz
  • todos los objetos relacionados con el tipo de objeto que se consulta de una forma concreta
  • todos los pasos temporales de los resultados de la simulación
Sintaxis Descripción

ANY(conditional expression)

ANY devuelve verdadero si la expresión es verdadera para cualquier fila del campo de matriz, por ejemplo

ANY(details.code=’JDS’)

devolverá verdadero si alguna de las filas del campo de matriz de detalles tiene el código JDS; en caso contrario, devuelve falso.

Nota: La expresión entre paréntesis puede contener más de un campo de matriz, otros campos del objeto, constantes y funciones no agregadas, y todas ellas se pueden combinar con operadores aritméticos, de comparación y lógicos.

ALL(conditional expression)

ALL devuelve verdadero si la expresión es verdadera para todas las filas, los objetos o pasos temporales relacionados.

COUNT(conditional expression)

COUNT cuenta el número de filas, objetos relacionados o pasos temporales para los que la expresión es verdadera.

MAX(conditional expression)

MAX devuelve el valor máximo (número, fecha o cadena) de todas las filas, objetos relacionados o pasos temporales.

Nota: MAX y MIN funcionan en campos numéricos, de fecha y de cadena. En el caso de los campos de cadena, la comparación entre cadenas se realiza en función del idioma en el que se haya configurado la instalación de Windows.

MIN(conditional expression)

MIN devuelve el valor mínimo (número, fecha o cadena) de todas las filas, objetos relacionados o pasos temporales.

Nota: MAX y MIN funcionan en campos numéricos, de fecha y de cadena. En el caso de los campos de cadena, la comparación entre cadenas se realiza en función del idioma en el que se haya configurado la instalación de Windows.

AVG(conditional expression)

AVG devuelve la media de todos los valores no nulos de la expresión (solo numéricos) para todas las filas/objetos relacionados/pasos temporales.

FIRST(conditional expression)

FIRST devuelve el valor de la expresión para la primera fila, objeto relacionado o paso temporal.

LAST(conditional expression)

LAST devuelve el valor de la expresión para la última fila, objeto relacionado o paso temporal. Por tanto, al calcular el valor, se tiene en cuenta uno de los registros del campo de matriz.

Operadores aritméticos

Sintaxis Descripción

+

Todos estos operadores hacen lo que se espera de los números.


<> significa "no es igual a" o "no es igual a", según el contexto.


Además, + se puede utilizar para concatenar cadenas. + es el único operador aritmético que tiene un significado especial para cadenas.

-

*

/

=

<

<=

>

>=

<>

^

El operador ^ significa "elevar a la potencia". Por ejemplo, x^2 significa x al cuadrado.

%

El operador % significa "el módulo de", por lo que a % b da el resto de a/b, por ejemplo, año % 10 da el último dígito del año.

Operadores lógicos

Sintaxis Descripción

AND

Intuitivo.

O

NOT

Otros operadores

Sintaxis Descripción

IS NULL

Se evalúa como verdadero si un campo es NULL

IS NOT NULL

Se evalúa como verdadero si un campo no es NULL

LIKE

Los dos caracteres especiales que se pueden utilizar con LIKE son:

  • * significar coincidir con cualquier elemento
  • ? significa coincidir con un carácter

Solo uno de cada dos caracteres de una cadena coincide con sí mismo.

La coincidencia es como en DOS, es decir:

  • LIKE "*" coincide con cualquier elemento.
  • LIKE "ABC*" coincide con cualquier elemento que comience con ABC.
  • LIKE "???" coincide con cualquier cadena de 3 caracteres.

Al igual que con DOS, una vez que se pulsa un *, todo coincide. Por lo tanto, no puede hacer cosas como LIKE "*AB" para encontrar cosas con AB al final, o LIKE "*AB*" para encontrar algo con AB en algún lugar de la cadena.

Tenga en cuenta que este comportamiento de LIKE es diferente del comportamiento de Microsoft Access.

MATCHES

MATCHES permite realizar búsquedas más complejas que el operador LIKE mediante expresiones regulares.

Los elementos de sintaxis importantes son:

  • . - (punto) cualquier carácter alfanumérico
  • * - cero o más del carácter anterior. Por lo tanto, B* coincidirá con cero o más Bs
  • + - uno o más del carácter anterior. B+ coincidirá con una o más B
  • ? - cero o uno del carácter anterior. Entonces B? coincidirá con cero o una B

La correspondencia funciona como se indica a continuación:

  • MATCHES ".*" coincide con cualquier elemento.
  • MATCHES "ABC.*" coincide con cualquier cadena que comience por ABC.
  • MATCHES "ABC.+" coincide con cualquier cadena que comience por ABC seguida de al menos un carácter más.
  • MATCHES ".*ABC.*" coincide con cualquier cadena que contenga ABC.
  • MATCHES ".*ABC" coincide con cualquier cadena que termine en ABC.
  • MATCHES "RS*" coincide con cualquier cadena que comience por R seguida de cero o más s.

Las expresiones regulares son potentes y se puede hacer mucho más con ellas que con los ejemplos básicos que se muestran arriba. Para obtener más información sobre las expresiones regulares y su sintaxis, consulte este artículo en Wikipedia.

Constantes

Sintaxis Descripción

TRUE

Intuitivo.

FALSE

NULL

Funciones añadidas (solo resultados)

Es posible utilizar las funciones añadidas en todos los resultados de la simulación en lugar de solo una instantánea mediante tsr en lugar de sim.

Sintaxis Descripción

DURATION(conditional expression)

El tiempo (en minutos) durante el que la expresión es verdadera (solo resultados), por ejemplo:

DURATION(tsr.pressure < x)

devolverá el tiempo acumulado (en minutos) en el que un nodo tiene una presión inferior a x.

INTEGRAL(conditional expression)

La suma del valor de la expresión en cada paso temporal multiplicada por la longitud del paso temporal en minutos (solo resultados), por ejemplo:

INTEGRAL(tsr.flow*60)

devolverá el volumen total de agua que fluye a través de una tubería (en litros), en el supuesto de que se utilice l/s como unidad de caudal.

WHENEARLIEST(conditional expression)

La hora más temprana en la que la expresión es verdadera (solo resultados), por ejemplo:

WHENEARLIEST(tsr.pressure < x)

devolverá la fecha y hora del primer paso temporal en el que un nodo tiene una presión inferior a x.

WHENLATEST(conditional expression)

La última hora en la que la expresión es verdadera (solo resultados), por ejemplo:

WHENLATEST(tsr.pressure < x)

devolverá la fecha y hora del último paso temporal en el que un nodo tiene una presión inferior a x.

EARLIEST(conditional expression)

El primer valor no nulo de la expresión (solo resultados). Es probable que esto solo dé una respuesta significativa si se utiliza en combinación con la función IIF, por ejemplo:

EARLIEST(IIF(tsr.pressure < x, tsr.pressure, NULL))

devolverá la presión de un nodo en el primer paso temporal en el que ese nodo ha tenido una presión inferior a x.

LATEST(conditional expression)

El último valor no nulo de la expresión (solo resultados). Es probable que esto solo dé una respuesta significativa si se utiliza en combinación con la función IIF, por ejemplo:

LATEST(IIF(tsr.pressure < x, tsr.pressure, NULL))

devolverá la presión de un nodo en el último paso temporal en el que ese nodo ha tenido una presión inferior a x.

WHENMAX(conditional expression)

El tiempo en que la expresión alcanza su máximo (solo resultados), por ejemplo:

WHENMAX(tsr.pressure)

devolverá la fecha y hora en que un nodo alcanza la presión máxima registrada.

WHENMIN(conditional expression)

El tiempo en que la expresión alcanza su mínimo (solo resultados), por ejemplo:

WHENMIN(tsr.pressure)

devolverá la fecha y hora en que un nodo alcanza la presión mínima registrada.

Notas adicionales sobre el uso de SQL

  1. El motor SQL no realiza muchas acciones en la comprobación de tipos, por lo que puede realizar varias acciones potencialmente útiles, como:
    1. SET user_number_1 = x > 390000
      establecerá user_number_1 como 390000, 0 para los elementos con x > 1 para los demás, ya que las expresiones condicionales se evalúan como 0 para verdadero y 0 para falso.
    2. SET user_text_1 = z
      establecerá user_text_1 en el valor z, tenga en cuenta que cuando lo haga, las cadenas tendrán decimales innecesarios y se recortarán los decimales, así podrá tomar estas cadenas y concatenar otras cosas al final si lo desea.
    3. SET user_number_1 = user_text_1
      asignará el valor si la cadena es un número válido.
  2. El comportamiento de NULL es un poco complejo.
    1. Esencialmente NULL es un valor "No tengo valor": las vistas de tabla funcionan de la misma forma para los números, ya que existe una diferencia entre colocar 0 en una celda de tabla para un número y dejarlo en blanco. El valor "en blanco" es NULL, es decir, los objetos con celdas en blanco son los que se seleccionan si se realiza la acción x IS NULL.
    2. La regla general para SQL es que cualquier operación que implique cualquier elemento y NULL proporciona la respuesta NULL, por ejemplo
      • 3 + NULL is NULL
      • 3 > NULL is NULL
      • 3 < NULL is NULL

      El motor SQL trata la igualdad de forma algo diferente. x = NULL y x <> NULL hacen lo mismo que X IS NULL y X IS NOT NULL.

  3. Para cadenas, una cadena vacía es NULL y "" (cadena vacía) simultáneamente. Por lo tanto,
    • asset_id IS NULL
    • asset_id = ""
    • LEN(asset_id)=0
    todos los elementos seleccionados sin cadena de ID de activo.
  4. Los campos booleanos (campos con casillas de verificación) no tienen ningún concepto de NULL.
  5. Puede ocurrir un error de análisis cuando se haya incluido un nombre de campo que comience por un número. Se recomienda colocar este nombre de campo entre [ ] en la consulta SQL.

    Por ejemplo, en lugar de escribir

    SET 2d_pt_id = subcatchment_id
    puede utilizar
    SET [2d_pt_id] = subcatchment_id