Los bloques individuales se pueden utilizar para realizar las siguientes tareas con las siguientes palabras clave:
Con la excepción de los tres primeros:
Para borrar la selección, utilice la cláusula
CLEAR SELECTION
Para establecer una variable escalar, utilice la palabra clave LET, por ejemplo:
LET <variable name> = <value>
Para establecer una variable de lista, utilice la palabra clave LIST, por ejemplo:
LIST <variable name> = <value 1>, <value 2>, <value 3>, <value n>
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
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
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
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
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
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.
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 |
| 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:
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. |
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. |
| 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. |
Las funciones de agregado se utilizan para permitir el cálculo de valores basados en:
| 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. |
| 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. |
| Sintaxis | Descripción |
|---|---|
|
AND |
Intuitivo. |
|
O |
|
|
NOT |
| 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:
Solo uno de cada dos caracteres de una cadena coincide con sí mismo. La coincidencia es como en DOS, es decir:
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:
La correspondencia funciona como se indica a continuación:
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. |
| Sintaxis | Descripción |
|---|---|
|
TRUE |
Intuitivo. |
|
FALSE |
|
|
NULL |
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. |
SET user_number_1 = x > 390000establecerá 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.
SET user_text_1 = zestablecerá 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.
SET user_number_1 = user_text_1asignará el valor si la cadena es un número válido.
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.
asset_id IS NULL
asset_id = ""
LEN(asset_id)=0
Por ejemplo, en lugar de escribir
SET 2d_pt_id = subcatchment_idpuede utilizar
SET [2d_pt_id] = subcatchment_id