I singoli blocchi possono essere utilizzati per eseguire le seguenti attività utilizzando le seguenti parole chiave:
Ad eccezione dei primi tre:
Per cancellare la selezione, utilizzare la clausola
CLEAR SELECTION
Per impostare una variabile scalare, utilizzare la parola chiave LET, ad esempio
LET <variable name> = <value>
Per impostare una variabile di elenco, utilizzare la parola chiave LIST, ad esempio
LIST <variable name> = <value 1>, <value 2>, <value 3>, <value n>
Per selezionare oggetti, utilizzare la parola chiave SELECT, ad esempio
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
Se si sta selezionando dalla tabella corrente con la modalità di selezione corrente, la parola chiave SELECT può essere omessa, ad esempio:
x > 0
Per deselezionare oggetti, utilizzare la parola chiave 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
Per eliminare oggetti, utilizzare la parola chiave 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
Per modificare il valore di campi o variabili, utilizzare la parola chiave SET. È possibile impostare più valori alla volta separando le assegnazioni con virgole (",").
SET x = x – 100, y = y – 100
SET x = x – 100, y = y – 100 WHERE ground_level > 20
Per sostituire la tabella corrente e la modalità di selezione corrente, è necessario utilizzare la parola chiave 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
Per selezionare un certo numero di valori, utilizzare la parola chiave SELECT, seguita dai valori che occorre produrre, separati da virgole. Ad esempio,
SELECT node_id, MAX(us_links.conduit_width), MIN(us_links.conduit_width)
È possibile sostituire il titolo assegnato alla colonna nella griglia o nel file CSV utilizzando la parola chiave AS, ad esempio
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS mymin
Il titolo può essere senza virgolette, nel qual caso non ci possono essere spazi o caratteri non alfanumerici, oppure tra virgolette, ad esempio
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS '£% my min'
È possibile sostituire la tabella utilizzando la parola chiave FROM, ad es.
SELECT node_id AS title, MAX(us_links.conduit_width) AS mymax, MIN(us_links.conduit_width) AS mymin FROM node
I risultati vengono visualizzati in una griglia, a meno che non venga specificato un file con la parola chiave INTO FILE.
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'
È possibile filtrare gli oggetti che verranno segnalati utilizzando la parola chiave WHERE, ad es.
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
È possibile calcolare i risultati aggregati su gruppi di oggetti utilizzando la parola chiave GROUP BY, ad es.
SELECT MAX(MAX(us_links.conduit_width)) GROUP BY system_type
È possibile limitare i risultati degli aggregati segnalati utilizzando la parola chiave HAVING, ad es.
SELECT MAX(MAX(us_links.conduit_width)) GROUP BY system_type HAVING MAX(MAX(us_links.conduit_width)) < 1000
Nella tabella seguente viene elencata la sintassi SQL supportata in questo prodotto Autodesk. Ulteriori note sono riportate di seguito.
Per informazioni complete sull'utilizzo di SQL e di tutte le funzioni supportate, è possibile fare riferimento al documento tecnico SQL in InfoWorks WS Pro.
Il testo del commento viene ignorato durante l'esecuzione della query. I commenti possono essere specificati per riga (dove l'intera riga dopo la sintassi del commento viene considerata come testo del commento) o per blocco (dove un blocco può essere specificato come parte di una riga, fino ad estendersi su più righe). Il testo del commento viene evidenziato sintatticamente in verde all'interno della finestra di dialogo SQL.
| Sintassi | Descrizione |
|---|---|
| // | Commento su riga |
| /* | Commento in blocco: inizio del blocco di testo del commento |
| */ | Commento in blocco: fine del blocco di testo del commento |
| Sintassi | Descrizione |
|---|---|
|
INT(numero) |
Parte intera di un numero. |
|
FLOOR(numero) |
Il numero intero più vicino minore o uguale al parametro. |
|
CEIL(numero) |
Il numero intero più vicino maggiore o uguale al relativo parametro. |
| FIXED(numero da convertire,numero di cifre decimali) | Dato un numero e un numero di cifre decimali da 0 a 8, converte il numero in una stringa con tale numero di cifre decimali, arrotondando per eccesso o per difetto a seconda dei casi. Se il numero di cifre decimali è 0, la stringa non avrà alcun punto decimale. |
|
ABS(x) |
Assume il valore assoluto di x. Ad esempio: La funzione restituisce x se x >= 0, -x altrimenti |
|
LEFT(s,n) |
Restituisce i primi n caratteri della stringa s, o l'intera stringa se n è maggiore della lunghezza della stringa |
|
RIGHT(s,n) |
Restituisce gli ultimi n caratteri della stringa s, o l'intera stringa se n è maggiore della lunghezza della stringa |
|
MID(s,n,m) |
Restituisce la sottostringa della stringa s contenente m caratteri che iniziano nella posizione n, contando da 1 come posizione iniziale |
|
LEN(s) |
Restituisce la lunghezza della stringa s |
|
IIF(x,y,z) |
Se l'espressione x è true, allora restituisce y, in caso contrario restituisce z |
| NVL(x,y) | If x è nullo, allora restituisce y, in caso contrario restituisce x |
|
SUBST(s1,s2,s3) |
Sostituisce la prima istanza della stringa s2 nella stringa s1 con la stringa s3. Ad esempio: SUBST(node_id,'01','ND') applicato all'ID nodo "01880132", restituisce "ND880132" |
|
GSUBST(s1,s2,s3) |
Sostituisce tutte le istanze della stringa s2 nella stringa s1 con la stringa s3. Ad esempio: GSUBST(node_id,'01','ND') applicato all'ID nodo "01880132", restituisce "ND88ND32" |
|
GENSUBST(s,regexp,formato) |
Sostituisce la stringa s con il formato definito per l'espressione regolare regxp corrisponde alla stringa s, altrimenti restituisce la stringa s inalterata. Ad esempio: GENSUBST(node_id,'(01)(..)(..)(.*)','ND\2\4a\1') applicato al nodo "01880132", restituisce "ND8832a01" Nota:
Suggerimento: Le espressioni regolari sono molto potenti e possono essere utilizzate molto di più dell'esempio mostrato qui. Per ulteriori informazioni sulle espressioni regolari e sulla relativa sintassi, vedere questo articolo su Wikipedia.
|
| NL() |
Restituisce un carattere di nuova riga. Ad esempio, per impostare un campo note a tre righe: SET notes = 'Set' + NL() + 'new' + NL() + 'line' |
|
YEARPART(s) |
YEARPART si applica a/restituisce l'anno di una data. Se la data è 24/09/2024 (presupponendo la formattazione GG/MM/AAAA), YEARPART è 2024. Nota: Le funzioni YEARPART, MONTHPART e DAYPART funzionano su campi data e campi stringa formattati come date. Se la stringa a cui vengono applicate non è una data, viene restituito uno zero.
|
|
MONTHPART(s) |
MONTHPART si applica a/restituisce il mese di una data. MONTHPART è 09 nell'esempio precedente. Nota: Le funzioni YEARPART, MONTHPART e DAYPART funzionano su campi data e campi stringa formattati come date. Se la stringa a cui vengono applicate non è una data, viene restituito uno zero.
|
|
DAYPART(s) |
DAYPART si applica a/restituisce il giorno di una data. Nell'esempio precedente, DAYPART è 24. Nota: Le funzioni YEARPART, MONTHPART e DAYPART funzionano su campi data e campi stringa formattati come date. Se la stringa a cui vengono applicate non è una data, viene restituito uno zero.
|
|
NOW() |
Funzione senza alcun parametro che definisca il presente. Questa funzione controlla la data e l'ora corrente del computer, in modo che ogni volta non sia necessario riscrivere le query SQL con NOW prima che vegano eseguite per renderle attuali. |
|
DATEPART(data) |
DATEPART restituisce la parte di data come una data (ad esempio, rimuove i minuti dalle date). |
|
TIMEPART(date) |
TIMEPART restituisce la parte temporale di una data come numero di minuti dopo la mezzanotte. |
|
YEARSDIFF(da,a) |
YEARSDIFF restituisce il numero di anni completi tra due date. Nota: Le funzioni YEARSDIFF, MONTHSDIFF e DAYSDIFF ignorano i minuti delle date in questione.
|
|
MONTHSDIFF(from,to) |
MONTHSDIFF restituisce il numero di mesi completi tra due date. Nota: Le funzioni YEARSDIFF, MONTHSDIFF e DAYSDIFF ignorano i minuti delle date in questione.
|
|
DAYSDIFF(da,a) |
DAYSDIFF restituisce il numero di giorni completi tra due date. Nota: Le funzioni YEARSDIFF, MONTHSDIFF e DAYSDIFF ignorano i minuti delle date in questione.
|
|
INYEAR(data,numero) |
INYEAR restituisce true se la data è nell'anno indicato come un numero. Nota: Se uno qualsiasi dei parametri delle funzioni INYEAR, INMONTH, INYEARS e INMONTHS non è un numero, la funzione restituisce "false". Se il numero non è un intero, viene arrotondato all'intero più vicino.
|
|
INMONTH(data,mese,anno) |
INMONTH restituisce true se la data è nell'anno e nel mese indicati come numeri. Nota: Se uno qualsiasi dei parametri delle funzioni INYEAR, INMONTH, INYEARS e INMONTHS non è un numero, la funzione restituisce "false". Se il numero non è un intero, viene arrotondato all'intero più vicino.
|
|
INYEARS(date,startyear,endyear) |
INYEARS restituisce true se la data si trova in un anno compreso tra l'anno iniziale e l'anno finale inclusi. Nota: Se uno qualsiasi dei parametri delle funzioni INYEAR, INMONTH, INYEARS e INMONTHS non è un numero, la funzione restituisce "false". Se il numero non è un intero, viene arrotondato all'intero più vicino.
|
|
INMONTHS(data,meseinizio,annoinizio,mesefine,annofine) |
INMONTHS restituisce true se la data è compresa tra il mese iniziale dell'anno iniziale e il mese finale dell'anno finale. Nota: Se uno qualsiasi dei parametri delle funzioni INYEAR, INMONTH, INYEARS e INMONTHS non è un numero, la funzione restituisce "false". Se il numero non è un intero, viene arrotondato all'intero più vicino.
|
|
ISDATE(putative_date) |
Se il campo è una data perché proviene dal database, restituisce true, se è una stringa restituisce true se può essere convertita in una data, altrimenti restituisce false. |
|
MONTHYEARPART(date) |
MONTHYEARPART restituisce la stringa "<mese>/<anno>". |
|
YEARMONTHPART(date) |
YEARMONTHPART restituisce la stringa "<year>/<date>" |
|
MONTHNAME(data) |
MONTHNAME restituisce il nome del mese (nelle impostazioni internazionali correnti). |
|
SHORTMONTHAME(data) |
SHORTMONTHNAME restituisce il nome abbreviato del mese (in base a quanto determinato dalle impostazioni locali e dal modo in cui viene abbreviato da Windows). |
|
DAYNAME(date) |
DAYNAME restituisce il nome del giorno (nelle impostazioni internazionali correnti). |
|
SHORTDAYNAME(data) |
SHORTDAYNAME restituisce il nome abbreviato del giorno (in base a quanto determinato dalle impostazioni locali e dal modo in cui viene abbreviato da Windows). |
| NUMTOMONTHNAME(n) | Restituisce il nome del mese dato un numero intero da 1 a 12. |
| NUMTOSHORTMONTHNAME(n) | Restituisce la versione abbreviata del nome di un mese (ad esempio, JAN), dato un numero intero da 1 a 12. |
| TODATE(year,month,day) | Restituisce la data con l'anno, il mese e il giorno come numeri interi. |
| TODATETIME(year,month,day,hours,minutes) | Restituisce la data con l'anno, il mese e il giorno come numeri interi. |
Lo scopo di queste funzioni è dividere i valori in intervalli, assegnare punteggi ai valori, mappare i valori su elenchi e così via.
| Sintassi | Descrizione |
|---|---|
|
AREF(n,elenco) |
AREF, data una variabile di elenco e un numero compreso tra 1 e la lunghezza elenco, restituisce l'elemento nth nell'elenco. |
|
LEN(list variable) |
LEN restituisce il numero di elementi di una variabile list. |
|
RINDEX(expression, list variable) |
RINDEX è una funzione che può essere utilizzata solo se l'elenco è ordinato. Lo scopo della funzione RINDEX è essenzialmente quello di dividere i valori in "bucket". |
|
LOOKUP(espressione, variabile elenco) |
Se sono presenti n elementi nell'elenco e il valore dell'espressione è compreso tra 1 e n inclusi, LOOKUP restituirà l'elemento appropriato dall'elenco. |
|
MEMBER(espressione, variabile elenco) |
MEMBER restituisce true se il valore dell'espressione è uno dei valori dell'elenco, false in caso contrario. |
|
INDEX(espressione, variabile elenco) |
Se il risultato dell'espressione è il primo valore dell'elenco, INDEX restituirà 1, se è il valore del secondo restituirà 2, se il risultato dell'espressione non è l'elenco, restituirà 1. |
|
TITOLO(n,elenco) |
TITLE restituisce titoli per i "bucket" quando RINDEX viene utilizzato per partizionare i valori in un numero di intervalli. |
| Sintassi | Descrizione |
|---|---|
|
LOG(x) |
Calcola il logaritmo (in base 10) di x. |
|
LOGE(x) |
Calcola il logaritmo (in base e) di x. |
|
EXP(x) |
Calcola ex. |
|
SIN(x) |
Calcola il seno di x. |
|
COS(x) |
Calcola il coseno di x. |
|
TAN(x) |
Calcola la tangente di x. |
|
ASIN(x) |
Calcola il seno inverso di x. |
|
ACOS(x) |
Calcola il coseno inverso di x. |
|
ATAN(x) |
Viene calcolata la tangente inversa di x. |
|
ATAN2(x,y) |
Viene calcolata la tangente inversa di x / y utilizzando i segni di x e y per determinare il quadrante. |
|
GAMMALN(x) |
Restituisce il logaritmo (in base e) della funzione Gamma di x. |
Le funzioni di aggregazione vengono utilizzate per consentire il calcolo di valori in base a:
| Sintassi | Descrizione |
|---|---|
|
ANY(espressione condizionale) |
ANY restituisce true se l'espressione è vera per qualsiasi riga del campo array, ad esempio ANY(details.code=’JDS’) restituisce true se una delle righe del campo array dei dettagli ha il codice JDS, altrimenti restituisce false. Nota: L'espressione all'interno delle parentesi può contenere più di un campo array, altri campi dell'oggetto, costanti e funzioni non aggregate, che possono essere combinate con operatori aritmetici, di confronto e logici.
|
|
ALL(espressione condizionale) |
ALL restituisce true se l'espressione è vera per tutte le righe/gli oggetti correlati/i timestep. |
|
COUNT(espressione condizionale) |
COUNT conta il numero di righe/oggetti correlati/timestep per i quali l'espressione è vera. |
|
MAX(espressione condizionale) |
MAX restituisce il valore massimo (numero, data o stringa) per tutte le righe/gli oggetti correlati /i timestep. Nota: MAX e MIN funzionano entrambi su campi numerici, di data e di stringa. Nel caso di campi stringa, il confronto tra le stringhe viene eseguito in base alla lingua in cui è impostata l'installazione di Windows.
|
|
MIN(espressione condizionale) |
MIN restituisce il valore minimo (numero, data o stringa) per tutte le righe/gli oggetti correlati /i timestep. Nota: MAX e MIN funzionano entrambi su campi numerici, di data e di stringa. Nel caso di campi stringa, il confronto tra le stringhe viene eseguito in base alla lingua in cui è impostata l'installazione di Windows.
|
|
AVG(espressione condizionale) |
AVG restituisce la media di tutti i valori non nulli dell'espressione (solo numerica) per tutte le righe/gli oggetti correlati/i timestep. |
|
FIRST(espressione condizionale) |
FIRST restituisce il valore dell'espressione per la prima riga/oggetto correlato/timestep. |
|
LAST(espressione condizionale) |
LAST restituisce il valore dell'espressione per l'ultima riga/oggetto correlato/timestep. Pertanto, nel calcolo del valore, viene considerato uno dei record nel campo array. |
| Sintassi | Descrizione |
|---|---|
|
+ |
Tutti questi operatori svolgono le funzioni che ci si aspetta per i numeri.
<> significa "non uguale a" o "non corrisponde a", a seconda del contesto.
Inoltre, + può essere utilizzato per concatenare le stringhe. L'operatore + è l'unico operatore aritmetico che ha un significato speciale per le stringhe. |
|
- |
|
|
* |
|
|
/ |
|
|
= |
|
|
< |
|
|
<= |
|
|
> |
|
|
>= |
|
|
<> |
|
|
^ |
L'operatore ^ significa "elevare alla potenza". Ad esempio, x^2 significa x al quadrato. |
|
% |
L'operatore % indica "il modulo di", quindi a % b restituisce il resto di a/b, ad esempio l'anno % 10 restituisce l'ultima cifra dell'anno. |
| Sintassi | Descrizione |
|---|---|
|
AND |
Si spiega da sé |
|
OPPURE |
|
|
NOT |
| Sintassi | Descrizione |
|---|---|
|
IS NULL |
Restituisce true se un campo è NULL |
|
IS NOT NULL |
Restituisce true se un campo non è NULL |
|
LIKE |
I due caratteri speciali che è possibile utilizzare con LIKE sono:
Ogni altro carattere di una stringa corrisponde solo a se stesso. La corrispondenza è di tipo DOS, ovvero:
Come nel caso del DOS, una volta che si preme un * si esegue la corrispondenza con tutto. Pertanto non è possibile fare cose come LIKE '*AB' per trovare cose con AB alla fine, o LIKE''*AB*' per trovare qualcosa con AB da qualche parte nella stringa. Si noti che questo comportamento di LIKE è diverso da quello di Microsoft Access. |
|
MATCHES |
L'operatore MATCHES consente di effettuare ricerche più complesse rispetto all'operatore LIKE, utilizzando espressioni regolari. Gli elementi importanti della sintassi sono:
La corrispondenza funziona come segue:
Le espressioni regolari sono molto potenti e possono essere utilizzate molto di più degli esempi di base mostrati sopra. Per ulteriori informazioni sulle espressioni regolari e sulla relativa sintassi, vedere questo articolo su Wikipedia. |
| Sintassi | Descrizione |
|---|---|
|
TRUE |
Si spiega da sé |
|
FALSE |
|
|
Nullo |
È possibile utilizzare le funzioni di aggregazione per tutti i risultati della simulazione anziché una sola istantanea utilizzando tsr anziché sim.
| Sintassi | Descrizione |
|---|---|
|
DURATION(espressione condizionale) |
Tempo (in minuti) per cui l'espressione è vera (solo risultati), ad esempio DURATION(tsr.pressure < x) restituirà il tempo cumulativo (in minuti) per il quale un nodo ha una pressione inferiore a x. |
|
INTEGRAL(espressione condizionale) |
Somma del valore dell'espressione ad ogni timestep moltiplicata per la lunghezza del timestep in minuti (solo risultati), ad es. INTEGRAL(tsr.flow*60) restituirà il volume totale di acqua che scorre attraverso una condotta (in litri), supponendo che l/s sia utilizzato come unità di portata. |
|
WHENEARLIEST(espressione condizionale) |
L'ora meno recente per cui l'espressione è vera (solo risultati), ad esempio WHENEARLIEST(tsr.pressure < x) restituirà la data/ora del timestep meno recente in cui un nodo ha una pressione inferiore a x. |
|
WHENLATEST(espressione condizionale) |
L'ora più recente per cui l'espressione è vera (solo risultati), ad esempio WHENLATEST(tsr.pressure < x) restituirà la data/ora dell'ultimo timestep in cui un nodo ha una pressione inferiore a x. |
|
EARLIEST(espressione condizionale) |
Primo valore non nullo dell'espressione (solo risultati). È probabile che questo dia una risposta significativa solo se usato in combinazione con la funzione IIF, ad es. EARLIEST(IIF(tsr.pressure < x, tsr.pressure, NULL)) restituirà la pressione di un nodo nel primo timestep in cui il nodo ha avuto una pressione inferiore a x. |
|
LATEST(espressione condizionale) |
Ultimo valore non nullo dell'espressione (solo risultati). È probabile che questo dia una risposta significativa solo se usato in combinazione con la funzione IIF, ad es. LATEST(IIF(tsr.pressure < x, tsr.pressure, NULL)) restituirà la pressione di un nodo nell'ultimo timestep in cui il nodo ha avuto una pressione inferiore a x. |
|
WHENMAX(espressione condizionale) |
Momento in cui l'espressione raggiunge il suo massimo (solo risultati), ad esempio WHENMAX(tsr.pressure) restituirà la data e l'ora in cui un nodo raggiunge la pressione massima registrata. |
|
WHENMIN(espressione condizionale) |
Ora in cui l'espressione è al minimo (solo risultati), ad esempio WHENMIN(tsr.pressure) restituirà la data e l'ora in cui un nodo raggiunge la pressione minima registrata. |
SET user_number_1 = x > 390000imposterà user_number_1 su 1 per gli elementi con x > 390000, 0 per gli altri, poiché le espressioni condizionali restituiscono 1 se true e 0 se false.
SET user_text_1 = zimposterà user_text_1 sul valore z. Si noti che quando si esegue questa operazione, le stringhe vengono private dei punti decimali e delle cifre decimali non necessari, in modo da poterle utilizzare e concatenare altre informazioni alla fine, se lo si desidera.
SET user_number_1 = user_text_1assegnerà il valore se la stringa è un numero valido.
Il motore SQL tratta l'uguaglianza in modo leggermente diverso. x = NULL e x <> NULL eseguono la stessa operazione di X IS NULL e X IS NOT NULL.
asset_id IS NULL
asset_id = ""
LEN(asset_id)=0
Ad esempio, invece di scrivere
SET 2d_pt_id = subcatchment_idè possibile utilizzare
SET [2d_pt_id] = subcatchment_id