CHARACTER FUNCTION CHARACTER FUNCTIONS CASE- MANIPULATION FUNCTIONS CHARACTER- MANIPULATION FUNCTIONS LOWER UPPER INITCAP CONCAT SUBSTR LENGTH INSTR LPAD | RPAD TRIM REPLACE
CHARACTER FUNCTION Operatore Descrizione LOWER(colonna/espressione) Converte caratteri maiuscoli o misti in caratteri minuscoli UPPER(colonna/espressione) Converte caratteri minuscoli o misti in caratteri maiuscoli INITCAP(colonna/espressione) Converte la prima lettera in maiuscola Funzione Risultato LOWER(‘SQL Course’) sql course UPPER(‘SQL Course’) SQL COURSE INITCAP(‘SQL Course’) Sql Course
CHARACTER FUNCTION ESEMPI SELECT ‘Il lavoro di ‘||INITCAP(nome)||’ ‘||UPPER(cognome)||’ è ‘||mansione AS work FROM anagrafica; Risultato : Il lavoro di Paolo ROSSI è impiegato SELECT nome, cognome, indirizzo FROM anagrafica WHERE LOWER(cognome) = ‘rossi’;
CHARACTER FUNCTION Operatore Descrizione CONCAT(colonna1/espressione1, colonna2/espressione2) Concatena il primo carattere con il secondo SUBSTR(colonna/espressione,m[,n]) Restituisce la parte di stringa che va da m a n (n è il numero di caratteri della substring). Se m è negativo parte il conteggio dalla fine della stringa, se n è omesso restituisce tutti i caratteri fino alla fine della stringa. LENGTH(colonna/espressione) Restituisce il numero di caratteri in un’espressione INSTR(colonna/espressione,’string’,[,m],[n]) Ritorna la posizione della stringa all’interno dell’espressione. Opzionale : la posizone m da cui partire la ricerca o la n (lunghezza della substring dove cercare, da m a m+n ).
CHARACTER FUNCTION LPAD(colonna/espressione, n, ‘string’) Mette il carattere ‘string’ a sinistra dell’espressione quante volte serve per raggiungere n RPAD(colonna/espressione, n, ‘string’) Mette il carattere ‘string’ a destra dell’espressione quante volte serve per raggiungere n TRIM Elimina un carattere da una stringa REPLACE(text,search_string,replacement_sting) Sostituisce in un testo la stringa cercata, se c’è, con la stringa da sostituire
CHARACTER FUNCTION Funzione Risultato CONCAT(‘Hello’,’World’) SUBSTR(‘HelloWorld’,1,5) Hello LENGTH(‘HelloWorld’) 10 INSTR(‘HelloWorld’,’W’) 6 LPAD(nome,10,’*’) *****Paolo RPAD(nome,10,’*’) Paolo***** TRIM(‘H’ FROM ‘HelloWorld’) elloWorld REPLACE(‘HelloWorld’,’Hello’,’Ciao’) CiaoWorld
NUMBER FUNCTION Funzione Descrizione ROUND(colonna/espressione, n) Arrotonda il valore con n decimali. Se n è omesso, non vengono messi decimali. Se n è negativo vengono arrotondati i numeri a sinistra TRUNC(colonna/espressione, n) Tronca il valore alla n posizione, se n è omesso, n = 0 SE N è negativo tronca di due decimali a sinistra MOD(m,n) Ritorna il resto di m diviso n ROUND Funzione Risultato ROUND(45.926, 2) 45.93 TRUNC(45.926, 2) 45.92 MOD(1600,300) 100
NUMBER FUNCTION SELECT ROUND(45.923,2) A, ROUND(45.923,0) B, ROUND(45.923,-1) C FROM dual; Risultato : A = 45.92 , B = 46, C = 50 SELECT TRUNC(45.923,2) A, TRUNC(45.923,0) B, TRUNC(45.923,-2) C Risultato : A = 45.92 , B = 45, C = 0
LAVORARE CON LE DATE SELECT SYSDATE FROM DUAL; Operazioni con le date: aggiungere e togliere numeri dalle o alle date restituendo una data sottrazione tra due date per trovare il numero di giorni tra una data e l’altra aggiungere ore ad una data dividendo il numero per 24
SELECT (SYSDATE – hire_date)/7 AS WEEK LAVORARE CON LE DATE Operazione Risultato date + numero date date – numero date - date numero di giorni date + number/24 SELECT (SYSDATE – hire_date)/7 AS WEEK FROM EMPLOYEES
FUNZIONI DATE Funzione Descrizione MONTHS_BETWEEN (date1, date2) Numero di mesi tra due date (risultato positivo o negativo) ADD_MONTHS (date, n) Aggiunge n mesi alla data NEXT_DAY (date, ‘char’) Ritorna il prossimo giorno che sarà ‘char’. Char può essere numerico o una stringa LAST_DAY (date) L’ultimo giorno del mese indicato da date ROUND (date[,’fmt’]) Ritorna la data arrotondata nel formato specificato fmt. Se fmt è omesso, la data è arrotondata al giorno più vicino TRUNC(date [,’fmt’]) Truncate date
FUNZIONI DATE Funzione Risultato MONTHS_BETWEEN (’01-Jan-95’, ’11-Jan-94’) 19.677 ADD_MONTHS (’11-Jan-94’, 6) ’11-Jul-94’ NEXT_DAY (’01-Sep-95’, ‘Friday’) ’01-Sep-95’ LAST_DAY (’01-Feb-95’) ’28-Feb-95’
FUNZIONI DATE Assumiamo SYSDATE = ’25-Jul-95’ Funzione Risultato ROUND (SYSDATE, ’MONTH’) ’01-AUG-95’ ROUND (SYSDATE, ’YEAR’) ’01-JAN-96’ TRUNC (SYSDATE, ’MONTH’) ’01-JUL-95’ TRUNC (SYSDATE ’YEAR’) ’01-JAN-95’
CONVERSIONE DATA TYPE DA A VARCHA2 O CHAR NUMBER DATE VARCHAR2
CONVERSIONE DATA TYPE FUNZIONE SCOPO TO_CHAR(number|date, [ fmt], [nlsparametro] Converte un numero o una data in un VARCHAR2 nel formato fmt. Conversione di numero: nlsparametro specifica il formato in cui dovrà apparire la stringa di caratteri che rappresenterà il numero decimal character group separator local currency symbol international currency symbol Se omesso usa il parametro di default Conversione di date: Il parametro nlsparametro indica come verranno rappresentati giorno e mese e le abbreviazioni. Se nullo usa il default
CONVERSIONE DATA TYPE FUNZIONE SCOPO TO_NUMBER(char, [ fmt], [nlsparametro]) Converte una stringa di caratteri contenente numeri in un numero nel formato indicato da fmt. Nlsparametro ha la stessa funzione come nel caso della TO_CHAR TO_DATE(char, [ fmt], [nlsparametro]) Converte una stringa di caratteri che rappresenta una data nel formato fmt specificato. Se fmt è omesso, usa il formato DD-MON-YY
CONVERSIONE DATA TYPE TO_CHAR(date, ‘format_model’) Format model: deve essere messo tra apici ed è case sensitive può includere tutti i formati validi per la data SELECT employee_id, TO_CHAR(hire_date, ‘MM/YY’) Month_Hired FROM employees WHERE last_name = ‘Higgins’; I formati data possibili sono: YYYY, YEAR, MM, MONTH, MON, DY, DAY, DD
CONVERSIONE DATA TYPE TH Numero ordinale (esempio, DDTH per 4°) SP Il formato per l’ora è: HH24:MI:SS AM 15:45:32 PM E’ possibile scrivere stringhe come: DD “of” MONTH 12 of OCTOBER TH Numero ordinale (esempio, DDTH per 4°) SP Numero (esempio, DDSP per QUATTRO) SPTH o THSP Numero ordinale (esempio DDSPTH per QUARTO)
CONVERSIONE DATA TYPE Esempio: SELECT last_name, TO_CHAR(hire_date, ‘DD Month YYYY’) AS HIREDATE FROM employees Restituisce record: King 17 June 1997 Ernst 21 May 1991 … ….
TO_CHAR(number, ‘format_model’) CONVERSIONE DATA TYPE TO_CHAR(number, ‘format_model’) Ci sono alcuni tipi di formato utilizzabile nella To_CHAR per visualizzare un numero in formato carattere VARCHAR2: Formato Descrizione Esempio Risultato 9 Rappresenta un numero 999999 1234 Rappresenta 0 099999 001234 $ Dollaro $999999 $1234 . Decimale 999999.99 1234.00 , Separatore di migliaia 999,999 1,234
CONVERSIONE DATA TYPE SELECT TO_CHAR(salary, ‘$99,999.00’) AS SALARY FROM employees Risultato query: $6,000.00 …
F3 ( F2 ( F1 (col1, arg1),arg2), arg3) FUNZIONI ANNIDATE F3 ( F2 ( F1 (col1, arg1),arg2), arg3) Risultato annidamento: Primo step : F1 (col1, arg1) = A Secondo step : F2 (A,arg2) = B Terzo step : F3 (B, arg3) Le funzioni annidate vengono valutate dal livello più interno verso l’esterno. ESEMPIO: SELECT TO_CHAR(NEXT_DAY(ADD_MONTHS (hire_date, 6), ‘Friday’), ‘Day, Month DDth, YYYY’) FROM employees;
FUNZIONI NVL (espr1, espr2) NVL2 (espr1, espr2, espr3) NULLIF (espr1, espr2) COALESCE (espr1, espr2,…,esprn) Funzione Descrizione NVL Converte un valore null in una valore NVL2 Se espr1 non è nulla, NVL2 restituisce espr2. Se espr1 è nulla, NVL2 restituisce espr3. Espr1 può essere di qualsiasi tipo. NULLIF Compara le due espressioni e restituisce nullo se sono uguali altrimenti restituisce espr1 COALESCE Ritorna la prima espressione non nulla nella lista di espr
converte un valore nullo in un valore attuale NVL converte un valore nullo in un valore attuale i tipi di dato usati sono date, caratteri e numeri NVL (commission_pct, 0) NVL (hire_date, ’01-JAN-97’) NVL (job_id, ‘No Job Jet’) Utile soprattutto nei calcoli quando in campi numerici può esserci il campo null.
SELECT salary, commission_pct, NVL2 SELECT salary, commission_pct, NVL2(commission_pct, ‘SAL+COMM’, ‘SAL’) tot FROM employees WHERE department_id IN (50, 80) SALARY COMMISSION_PCT TOT 10500 0.2 SAL+COMM 11000 0.3 5800 SAL
NULLIF FROM employees; SELECT first_name, LENGTH(first_name) “espr1”, last_name, LENGTH(last_name) “espr2”, NULLIF(LENGTH(first_name), LENGTH(last_name)) result FROM employees; First_name espr1 Last_name espr2 Result Steven 6 King 4 Neena 5 Kochhar 7 Bruce Ernst
COALESCE la differenza da NVL è che permette di considerare più valori se la prima espressione è NON NULLA ritorna la prima espressione altrimenti se la seconda espressione è NON NULLA ritorna la seconda espressione…altrimenti ritorna l’espressione n
COALESCE FROM employees; SELECT last_name, COALESCE(commission_pct,salary,10) commissione FROM employees; Se commission_pct è not null, viene visualizzato. Se commission_pct è null, viene visualizzato Salary. Se commission_pct e salary sono null, viene visualizzato il valore 10. Last_name espr2 King 24000 Kochhar 17000 Grant 0.15
CONDITIONAL EXPRESSIONS le espressioni condizionali permettono di usare IF-THEN-ELSE ci sono due metodi: CASE DECODE
CASE espr WHEN espr1_comparazione THEN espr1_ritorno CASE EXPRESSIONS CASE espr WHEN espr1_comparazione THEN espr1_ritorno [WHEN espr2_comparazione THEN espr2_ritorno WHEN esprn_comparazione THEN esprn_ritorno ELSE else_espr] END Oracle controlla il primo WHEN…THEN, se espr è uguale all’espr1_comparazione restituisce espr1_ritorno. E così via fino all’ultima espressione di comparazione. Altrimenti restituisce else_espr. Non è possibile specificare NULL per le espr_ritorno o per else_espr. Tutte le espressioni devono essere dello stesso tipo di dati.
CASE EXPRESSIONS ESEMPIO: SELECT last_name, job_id, salary, CASE job_id WHEN ‘IT_PROG’ THEN 1.10*salary WHEN ‘ST_CLERCK’ THEN 1.15*salary WHEN ‘SA_REP’ THEN 1.20*salary ELSE salary END salario FROM employees; … LAST_NAME JOB_ID SALARY SALARIO Lorentz IT_PROG 4200 4260 Rajs ST_CLERCK 3500 4025
DECODE (col/espr, ricerca1, risultato1 FUNZIONE DECODE DECODE (col/espr, ricerca1, risultato1 [, ricerca2, risultato2, … ] [default ]) Se col/espr è uguale a ricerca1 restituisce risultato1 ect. Se il DEFAULT viene omesso, verrà restituito il valore NULL se nessuna comparazione ritorna valore positivo.
DECODE (job_id, ‘IT_PROG’, 1.10*salary, FUNZIONE DECODE Esempio SELECT last_name, job_id, salary, DECODE (job_id, ‘IT_PROG’, 1.10*salary, ‘ST_CLERCK’, 1.15*salary, ‘SA_REP’, 1.20*salary, salary) SALARIO FROM employees; LAST_NAME JOB_ID SALARY SALARIO Lorentz IT_PROG 4200 4260 Rajs ST_CLERCK 3500 4025