SQL (Structured Query Language)

Un corso completo sul linguaggio SQL (Structured Query Language): definizioni, esempi ed esercizi

Funzioni sulle potenze, logaritmi e radici in SQL

Capitolo 3

Segue dalla pagina web precedente

CONCAT

Questa sintassi non è accettata da Access. L’equivalente di questa funzione è stato utilizzato nel Capitolo 2, quando si è parlato di operatori. Il simbolo usato nel capitolo 2 è il seguente: che unisce insieme due stringhe di caratteri, come la funzione CONCAT. Ecco un esempio:

SELECT CONCAT(NOME, COGNOME) “NOME E COGNOME”

FROM CARATTERI;

NOME E COGNOME
GIGIROSSI
MARIOBIANCHI
MARIANERI
ANGELOBRUNI
ANNASCURI
ANTONIOVERDI

INITCAP

La funzione INITCAP trasforma in maiuscolo o lascia in maiuscolo il primo carattere di una parola e trasforma in minuscolo o lascia in minuscolo tutti gli altri caratteri. Questa funzione non è implementata da Access.

Vediamo un esempio:

SELECT NOME PRIMA, INITCAP(NOME) DOPO

FROM CARATTERI;

PRIMA DOPO
GIGI Gigi
MARIO Mario
MARIA Maria
ANGELO Angelo
ANNA Anna
ANTONIO Antonio

LOWER e UPPER

La funzione LOWER trasforma tutti i caratteri di una parola in maiuscolo; UPPER esegue l’operatore inversa. Questa funzione non è implementata da Access. Vediamo degli esempi:

UPDATE CARATTERI

SET NOME = ‘Mario’

WHERE NOME = ‘MARIO’;

Aggiornata 1 riga.

Con questa espressione abbiamo modificato il formato con cui viene rappresentato uno dei nomi della tabella CARATTERI , al fine di accertarci che la funzione esegua il suo compito correttamente.

SELECT NOME, UPPER(NOME), LOWER(NOME)

FROM CARATTERI;

NOME UPPER(NOME) LOWER(NOME)
GIGI GIGI gigi
Mario MARIO mario
MARIA MARIA maria
ANGELO ANGELO angelo
ANNA ANNA anna
ANTONIO ANTONIO antonio

LPAD e RPAD

La ‘L’ e la ‘R’ stanno per left e right mentre ‘PAD’ significa in inglese cuscinetto.

Queste due funzioni richiedono da due a tre argomenti. Il primo argomento rappresenta le stringhe sulle quali operare. Il secondo argomento è il numero di caratteri da aggiungere alla stringa. Il terzo argomento (facoltativo) è il carattere da aggiungere, che può essere un singolo carattere o una stringa di caratteri; se non viene specificato, sarà automaticamente aggiunto uno spazio. Questa funzione non è implementata da Access. Vediamo alcuni esempi:

SELECT COGNOME, LPAD(COGNOME,20,’*’)

FROM CARATTERI;

COGNOME LPAD(COGNOME,20,’*’)
ROSSI ***************ROSSI
BIANCHI *************BIANCHI
NERI ****************NERI
BRUNI ***************BRUNI
SCURI ***************SCURI
VERDI ***************VERDI

SELECT COGNOME, LPAD(COGNOME,20,’tra’)

FROM CARATTERI;

COGNOME LPAD(COGNOME,20,’TRA’)
ROSSI tratratratratraROSSI
BIANCHI tratratratratBIANCHI
NERI tratratratratratNERI
BRUNI tratratratratraBRUNI
SCURI tratratratratraSCURI
VERDI tratratratratraVERDI

SELECT COGNOME, RPAD(COGNOME,20,’/’)

FROM CARATTERI;

COGNOME RPAD(COGNOME,20,’/’)
ROSSI ROSSI///////////////
BIANCHI BIANCHI/////////////
NERI NERI////////////////
BRUNI BRUNI///////////////
SCURI SCURI///////////////
VERDI VERDI///////////////

LTRIM e RTRIM

La ‘L’ e la ‘R’ stanno per left e right mentre To trim in inglese significa anche tagliare.

Il primo argomento, come per le funzioni RPAD e LPAD, rappresenta le stringhe sulle quali operare. Il secondo argomento può essere un carattere o una stringa di caratteri. Queste due funzioni non sono implementate da Access.

Vediamo alcuni esempi:

SELECT NOME, RTRIM(NOME, ‘O’)

FROM CARATTERI;

NOME RTRIM(NOME, ‘O’)
GIGI GIGI
MARIO MARI
MARIA MARIA
ANGELO ANGEL
ANNA ANNA
ANTONIO ANTONI

SELECT NOME, RTRIM(NOME, ‘N’)

FROM CARATTERI;

NOME RTRIM(NOME, ‘N’)
GIGI GIGI
MARIO MARIO
MARIA MARIA
ANGELO ANGELO
ANNA ANNA
ANTONIO ANTONIO

SELECT NOME, LTRIM(NOME, ‘A’)

FROM CARATTERI;

NOME LTRIM(NOME, ‘A’)
GIGI GIGI
MARIO MARIO
MARIA MARIA
ANGELO NGELO
ANNA NNA
ANTONIO NTONIO

REPLACE

REPACE permette di sostituire una stringa di caratteri con quella specifica. Richiede tre argomenti: il primo rappresenta le stringhe sulle quali effettuate le ricerche ; il secondo è la stringa da ricercare e sostituire; il terzo è facoltativo e specifica la stringa di sostituzione.

Se l’ultimo argomento non viene indicato, ogni ricorrenza della chiave di ricerca (stringa trovata) viene eliminata, senza essere sostituita da un’altra stringa. Questa funzione non è implementata da Access. Vediamo alcuni esempi:

SELECT NOME, REPLACE(NOME, ‘R’, ‘**’)

FROM CARATTERI;

NOME REPLACE(NOME,’R’,’**)
GIGI GIGI
MARIO MA**IO
MARIA MA**IA
ANGELO ANGELO
ANNA ANNA
ANTONIO ANTONIO

SELECT NOME, REPLACE(NOME, ‘A’)

FROM CARATTERI;

NOME REPLACE(NOME, ‘A’)
GIGI GIGI
MARIO MRIO
MARIA MRI
ANGELO NGELO
ANNA NN
ANTONIO NTONIO

SUBSTR

Questa funzione consente si estrarre una serie di caratteri (sottostringa) da una stringa specificata. SUBSTR richiede tre argomenti: il primo è la stringa specificata da esaminare; il secondo è la posizione del primo carattere da estrarre; il terzo è il numero di caratteri da estrarre. Se il terzo parametro viene omesso la query visualizza tutti i caratteri rimanenti dopo la posizione specificata. Questa funzione non è implementata da Access. Vediamo alcuni esempi:

SELECT COGNOME, SUBSTR(COGNOME, 2, 3)

FROM CARATTERI;

COGNOME SUBSTR(COGNOME, 2, 3)
ROSSI OSS
BIANCHI IAN
NERI ERI
BRUNI RUN
SCURI CUR
VERDI ERD

SELECT COGNOME, SUBSTR(COGNOME,2)

FROM CARATTERI;

COGNOME SUBSTR(COCOGNOME, 2)
ROSSI OSSI
BIANCHI IANCHI
NERI ERI
BRUNI RUNI
SCURI CURI
VERDI ERDI

Se viene utilizzato un numero negativo come secondo argomento, la posizione iniziale viene determinata contando la stringa da destra verso sinistra iniziando dal suo ultimo carattere. Vediamo alcuni esempi:

SELECT COGNOME, SUBSTR(COGNOME,-4, 2)

FROM CARATTERI;

COGNOME SUBSTR(COGNOME, -4, 2)
ROSSI OS
BIANCHI NC
NERI NE
BRUNI RU
SCURI CU
VERDI ER

SELECT COGNOME, SUBSTR(COGNOME,-5, 2)

FROM CARATTERI;

COGNOME SUBSTR(COGNOME,-5, 2)
ROSSI RO
BIANCHI AN
NERI
BRUNI BR
SCURI SC
VERDI VE

Vediamo un esempio in cui vogliamo visualizzare solo le iniziali dei nominativi presenti in CARATTERI:

SELECT SUBSTR(NOME, 1, 1) ‘ – ‘ SUBSTR(COGNOME, 1, 1)

FROM CARATTERI;

SUBST
G – R
M – B
M – N
A – B
A – S
A – V

INSTR

La funzione INSTR permette di sapere in quale punto di una stringa si trova un particolare schema di caratteri. Il primo argomento della funzione è la stringa da esaminare. Il secondo argomento è lo schema da ricercare. Il terzo e il quarto argomento sono numeri che indicano dove iniziare le ricerche e quale tipo di corrispondenza fornire. Vediamo alcuni esempi:

SELECT COGNOME, INSTR(COGNOME, ‘I’, 2, 1)

FROM CARATTERI;

COGNOME INSTR(COGNOME, ‘I’, 2, 1)
ROSSI 5
BIANCHI 2
NERI 4
BRUNI 5
SCURI 5
VERDI 5

SELECT COGNOME, INSTR(COGNOME, ‘I’, 2, 2)

FROM CARATTERI;

COGNOME INSTR(COGNOME,’I’,2,2)
ROSSI 0
BIANCHI 7
NERI 0
BRUNI 0
SCURI 0
VERDI 0

SELECT COGNOME, INSTR(COGNOME, ‘R’, 2, 2)

FROM CARATTERI;

COGNOME INSTR(COGNOME, ‘R’, 2, 2)
ROSSI 0
BIANCHI 0
NERI 0
BRUNI 0
SCURI 0
VERDI 0

SELECT COGNOME, INSTR(COGNOME, ‘N’, 2, 1)

FROM CARATTERI;

COGNOME INSTR(COGNOME, ‘N’, 2, 1)
ROSSI 0
BIANCHI 4
NERI 0
BRUNI 4
SCURI 0
VERDI 0

SELECT NOME, INSTR(NOME, ‘N’, 2, 2)

FROM CARATTERI;

COGNOME INSTR(NOME, ‘N’, 2, 2)
ROSSI 0
BIANCHI 0
NERI 0
BRUNI 0
SCURI 3
VERDI 5

Il valore di default per il terzo e il quarto argomento è 1.

Access implementa questa funzione usando un’altra sintassi, vediamo come:

InStr([inizio, ]stringa1, stringa2[, confronto])

La sintassi della funzione InStr è composta dai seguent argomenti:

  • inizio Facoltativa. Espressione numerica che definisce la posizione di inizio per ciascuna ricerca. Se omessa, la ricerca inizia dalla posizione del primo carattere.
  • stringa1 Obbligatoria. Espressione stringa oggetto della ricerca.
  • stringa2 Obbligatoria. Espressione stringa cercata.
  • confronto Facoltativa. Specifica il tipo di confronto di stringa. Per ulteriori informazioni consultare la guida in linea.

LENGTH

La sintassi accettata da Access per tale funzione è: Len(nome_campo)

La funzione LENGTH restituisce la lunghezza del suo argomento, come in questo esempio:

SELECT NOME, LENGTH(NOME)

FROM CARATTERI;

NOME LENGTH(NOME)
GIGI 4
MARIO 5
MARIA 5
ANGELO 6
ANNA 4
ANTONIO 7

Funzione USER

Questa funzione restituisce il nome dell’utente corrente alla tabella specificata. Questa funzione non è implementata da Access. Vediamo un esempio:

SELECT USER

FROM CARATTERI;

USER
DEMO
DEMO
DEMO
DEMO
DEMO
DEMO

Autore: Art Net

Condividi questo articolo su

15 Commenti

  1. SAlve, quindi non esiste una funzione come p.e. in Excel, che estragga alcuni caratteri a destra o sinistra?
    Ho provato cn right(nome, 3) ma non lo riconosce

    Rispondi al Commento
  2. SELECT COUNT (*)
    Buongiorno

    FROM IMPIEGATO
    WHERE DIPARTIMENTO = ‘PRODUZIONE’

    genera il seguente errore:
    “The data types text and varchar are incompatible in the equal to operator”.

    Invece, sostituendo con WHERE DIPARTIMENTO LIKE ‘PRODUZIONE’, la query funziona.

    Rispondi al Commento
  3. Ho imparato alcune cose buone qui. Certamente merita il bookmarking per la rivisitazione.

    Mi chiedo quanti sforzi hai impostato per creare questo tipo di fantastico sito informativo.

    Rispondi al Commento
  4. guida molto interessante grazie se ci fossero anche le istruzioni per creare la tabella sarebbe completa secondo me

    Rispondi al Commento
  5. Grazie per la guida. Semplice, interessante ed utile.
    Vorremmo segnalare due cose. Un errore ed un dubbio.
    Errore:
    SELECT DIVISIONE, AVG(STIPENDIO)
    FROM DIPENDENTI
    HAVING AVG(STIPENDIO) > 2200000;

    manca la “group by DIVISIONE” prima della HAVING.

    Di conseguenza il dubbio sul punto 6.
    HAVING non è necessario che venga posta dopo la clausola GROUP BY.
    Sicuri?

    Rispondi al Commento
  6. Guida Molto utile, segnalo un errore nella query 9, capitolo 2, delle soluzioni:
    PrezzoIngrosso è moltiplicato * 1,5 ma si chiedeva un aumento del 15%, ciò significa moltiplicare * 1,15

    Rispondi al Commento
  7. Veramente complimenti, una guida dettagliata, semplice e adatta a tutti 🙂

    FortyZone

    Rispondi al Commento
  8. Davvero complimenti ragazzi. La prima guida che per chi parte da zero è manna dal cielo…PERFETTA!!

    Rispondi al Commento
  9. nel punto 8 la soluzione non dovrebbe essere con HAVING MIN(IMPORTO) > 400 000; cioè: SELECT BENEFICIARI FROM ASSEGNI GROUP BY BENEFICIARIO HAVING MIN(IMPORTO) > 400 000;

    Rispondi al Commento
  10. un ottimo Manuale unico errore (se vogliamo chiamarlo cosi) i tipi di dati Char(5) number(5,2) cosa sono e come si usano

    Rispondi al Commento
  11. Complimenti ottimo sito! fatto davvero bene. Grazie!

    Rispondi al Commento

Invia commento

Il tuo indirizzo email non sarà pubblicato.