Funzioni sulle potenze, logaritmi e radici in SQL
Indice
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 |
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
applicando l’add_months ad alcuni sql editor online appare il seguente messaggio di errore:
[“date” is not a recognized table hints option. If it is intended as a parameter to a table-valued function or to the CHANGETABLE function, ensure that your database compatibility mode is set to 90.]
SQL Editor utilizzati
https://rextester.com/l/sql_server_online_compiler
http://www.sqlfiddle.com/#!18/28da7/1
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.
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.
guida molto interessante grazie se ci fossero anche le istruzioni per creare la tabella sarebbe completa secondo me
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?
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
Grazie guida molto utile per imparare da 0.
Veramente complimenti, una guida dettagliata, semplice e adatta a tutti 🙂
FortyZone
Davvero complimenti ragazzi. La prima guida che per chi parte da zero è manna dal cielo…PERFETTA!!
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;
un ottimo Manuale unico errore (se vogliamo chiamarlo cosi) i tipi di dati Char(5) number(5,2) cosa sono e come si usano
Complimenti ottimo sito! fatto davvero bene. Grazie!
ma come si crea il database?
È stata spiegato molto bene.