Sintassi SQL

Note sulle parole chiave

Un blocco SQL può contenere un certo numero di clausole separate da punti e virgola (";").


I singoli blocchi possono essere utilizzati per eseguire le seguenti attività utilizzando le seguenti parole chiave:

  1. Cancellare la sezione: CLEAR SELECTION
  2. Impostare una variabile scalare: LET
  3. Impostare una variabile elenco: LIST
  4. Selezionare oggetti: SELECT
  5. Deselezionare oggetti (ovvero, rimuovere oggetti dalla selezione): DESELECT
  6. Eliminare oggetti: DELETE
  7. Modificare i valori di campi o variabili: SET e UPDATE
  8. Generare una tabella di valori che può essere visualizzata in una griglia o esportata in un file CSV: SELECT

Ad eccezione dei primi tre:


Di seguito vengono fornite maggiori informazioni sulle parole chiave:
  1. Cancellare la selezione

    Per cancellare la selezione, utilizzare la clausola

    CLEAR SELECTION


  2. Impostare una variabile scalare

    Per impostare una variabile scalare, utilizzare la parola chiave LET, ad esempio

    LET <variable name> = <value>


  3. Impostare una variabile elenco

    Per impostare una variabile di elenco, utilizzare la parola chiave LIST, ad esempio

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


  4. Seleziona oggetti

    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


  5. Deselezionare oggetti

    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


  6. Eliminare oggetti

    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


  7. Modificare il valore di campi o variabili

    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


  8. Generare una tabella di valori

    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


Sintassi SQL supportata

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.

Testo del commento

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

Funzioni

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:
  • L'espressione regolare può essere utilizzata per dividere la stringa in espressioni secondarie mediante l'uso di parentesi.
  • Nell'esempio precedente, ‘(01)(..)(..)(.*)’ corrisponde a qualsiasi ID nodo composto da almeno 6 caratteri che iniziano con 01. Il primo (..) corrisponde al 3° e 4° carattere della stringa, il secondo (..) al 5° e 6° e (.*) della parte restante della stringa.
  • Se si verifica una corrispondenza, viene restituita una stringa nel formato definito; dove \1 rappresenta i valori della prima espressione secondaria tra parentesi "01", \2 rappresenta i valori della seconda sottoespressione tra parentesi (..) - in questo caso "88", ecc. fino a \9.
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.

Funzioni elenco

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.

Funzioni matematiche

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.

Funzioni di aggregazione

Le funzioni di aggregazione vengono utilizzate per consentire il calcolo di valori in base a:

  • tutte le righe di un campo array
  • tutti gli oggetti correlati al tipo di oggetto sottoposto a query in un determinato modo
  • tutti i timestep nei risultati della simulazione
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.

Operatori aritmetici

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.

Operatori logici

Sintassi Descrizione

AND

Si spiega da sé

OPPURE

NOT

Altri operatori

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:

  • * significa qualsiasi corrispondenza
  • ? significa corrispondenza con un carattere

Ogni altro carattere di una stringa corrisponde solo a se stesso.

La corrispondenza è di tipo DOS, ovvero:

  • LIKE '*' qualsiasi corrispondenza
  • LIKE 'ABC*' corrisponde a tutto ciò che inizia con ABC
  • LIKE '???' corrisponde a qualsiasi stringa di 3 caratteri

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:

  • . - (punto) qualsiasi carattere alfanumerico
  • * - zero o più del carattere precedente. Quindi B* corrisponderà a zero o più B
  • + - uno o più caratteri dei precedenti. Quindi B+ corrisponderà ad una o più B
  • ? - zero o uno dei caratteri precedenti. Quindi B? corrisponderà a zero o ad una B

La corrispondenza funziona come segue:

  • MATCHES '*' corrisponde a qualsiasi elemento
  • MATCHES 'ABC.*' corrisponde a tutto ciò che inizia con ABC
  • MATCHES 'ABC.+' corrisponde a qualsiasi stringa che inizia con ABC seguita da almeno un altro carattere
  • MATCHES '.*ABC.*' corrisponde a qualsiasi stringa contenente ABC
  • MATCHES '.*ABC' corrisponde a qualsiasi stringa che termina con ABC
  • MATCHES 'RS*' corrisponde a qualsiasi stringa che inizia con R seguita da zero o più S

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.

Costanti

Sintassi Descrizione

TRUE

Si spiega da sé

FALSE

Nullo

Funzioni di aggregazione (solo risultati)

È 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.

Note aggiuntive sull'utilizzo di SQL

  1. Il motore SQL non fa molto in termini di controllo dei tipi, quindi è possibile fare una serie di operazioni potenzialmente utili, come ad esempio:
    1. SET user_number_1 = x > 390000
      imposterà 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.
    2. SET user_text_1 = z
      imposterà 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.
    3. SET user_number_1 = user_text_1
      assegnerà il valore se la stringa è un numero valido.
  2. Il comportamento di NULL è leggermente complesso.
    1. In sostanza, NULL è un valore "I have no value"; le finestre della griglia funzionano allo stesso modo per i numeri, in quanto c'è una differenza tra mettere 0 in una cella della griglia per un numero e lasciarla vuota. Il valore 'blank' è NULL, ovvero gli oggetti con celle vuote sono quelli che vengono selezionati se si esegue x IS NULL.
    2. La regola generale per SQL è che qualsiasi operazione che coinvolga qualsiasi cosa e NULL restituisce come risposta NULL.
      • 3 < NULL è NULL
      • 3 < NULL è NULL
      • 3 < NULL è NULL

      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.

  3. Per le stringhe, una stringa vuota è contemporaneamente NULL e "'' (stringa vuota). Di conseguenza
    • asset_id IS NULL
    • asset_id = ""
    • LEN(asset_id)=0
    tutti gli elementi senza stringa del codice ID.
  4. I campi booleani (campi con caselle di controllo) non hanno il concetto di NULL.
  5. È possibile che si verifichi un errore di analisi quando si è incluso un nome di campo che inizia con un numero. Si consiglia di inserire il nome del campo tra parentesi quadre ([ ]) nella query SQL.

    Ad esempio, invece di scrivere

    SET 2d_pt_id = subcatchment_id
    è possibile utilizzare
    SET [2d_pt_id] = subcatchment_id