SQL

JiFile per Joomla!

JIFile
JiFile è una componente per Joomla! che permette di indicizzare il contenuto dei file(PDF, DOC, ecc.) per poter effettuare delle ricerche al loro interno.

Scopri di più...  Demo

JoomPhoto Mobile

JPhotoMobile
JoomPhoto Mobile è una componente per Joomla! che ti permette di condividere le foto dal tuo dispositivo Android sul tuo portale Joomla!.

Scopri di più...  Demo

iFile Framework

IFile
IFile è un framework open source scritto interamente in PHP, permette l'indicizzazione dei contenuti testuali di un documento (DOC, PDF, EXCEL, etc) e una rapida ricerca all'interno degli stessi.

Scopri di più...  Demo

Easy Language

EasyLanguage
Easy Language è un plugin per la gestione semplice ed immediata di testi multilingua in ogni parte possibile di joomla, articoli, componenti, moduli, metadata, template, altri componenti(esempio K2) ecc.

Scopri di più...

Article Book Effect

Article Book Effect
Visualizza gli articoli di Joomla con l'effetto volta pagina di un libro. Questo plugin consente di visualizzare il contenuto di un articolo Joomla come un vero e proprio libro o una rivista, utilizzando tutti i vantaggi di HTML5

Scopri di più...  Demo

 

Fototessera

Article Book Effect
La più famosa Android App che ti permette di stampare le foto tessere per i tuoi documenti con il tuo smartphone Android, in modo semplice ed intuitivo.

Scopri di più...

 

Ombra pazza 3D

Ombra pazza 3D
Ombra Pazza è il puzzle game 3D frenetico e divertente per Android! Prova a ruotare le forme portandole nella posizione delle proprie ombre senza mai fallire! Risolvi una dopo l'altra tutte le combinazioni dei livelli di gioco.

Scopri di più...

 

Admin Countdown

Admin Countdown
Modulo per Joomla! 2.5 e 3.x visualizza nella parte di amministrazione del sito, un timer con il conto alla rovescia del tempo rimanente della tua sessione.

Scopri di più...  Demo

 

A proposito di date, in Oracle


Tramite una serie di domande (e relative risposte) vi proponiamo in questo articolo un percorso attraverso
il "mondo delle date" in Oracle, sperando che possa servire come approfondimento, o come promemoria
di pronta consultazione.
Sono benvenuti i commenti, e proposte per aggiungere altri casi d'uso!


1)  qual é il formato della data utilizzato, e quale é la lingua della sessione di lavoro sul DB Oracle?

select * 
from nls_session_parameters
where parameter in ('NLS_DATE_FORMAT','NLS_DATE_LANGUAGE');
Un risultato per tale query può essere ad esempio il seguente:


PARAMETER		    VALUE
---------------		--------
NLS_DATE_FORMAT		DD-MON-RR
NLS_DATE_LANGUAGE	ITALIAN
Si noti che:
- il valore del parametro NLS_DATE_FORMAT indica il formato in cui viene espressa la data
- il valore del parametro NLS_DATE_LANGUAGE indica la lingua usata

1b) come si fa a cambiare il formato di visualizzazione della data, per esempio mettendo il nome del mese per esteso?

alter session set NLS_DATE_FORMAT='DD-MONTH-YY';
testo di accompagnamento testo di accompagnamento

1c) come si fa a cambiare la lingua di visualizzazione della data, per esempio mettendola in francese?

alter session set NLS_LANGUAGE=FRENCH;


2) come si utilizza to_date() ?

La funzione to_date() agisce su una stringa, per ottenere una data. Deve avere come primo argomento una stringa che rappresenta una data, e può avere come secondo argomento un formato al quale la data (del primo argomento) deve aderire. Nell'esempio di seguito si mostra la necessità di fare aderire la stringa della data (primo argomento) alla stringa del formato (secondo argomento).
select 
	to_date('05/16/13', 'MM/DD/YY') as dataesempio1,
	to_date('16-Mag-13', 'DD-Mon-YY HH:MI:SS') as dataesempio2,
	to_date('Maggio.16.2013', 'Month.DD.YYYY HH:MI:SS') as dataesempio3
from dual;  
Si noti che:
a) il formato in cui é visualizzato il risultato dipende dal parametro NLS_DATE_FORMAT che si é ricavato al punto 1).
b)i casi in cui il mese é "Mag" e "Maggio" funzionano perché il parametro NLS_DATE_LANGUAGE é uguale a ITALIAN.
Se invece non si specifica il secondo argomento, allora il suddetto esempio diventa come segue:
select 
	to_date('05/16/13') as dataesempio1,
	to_date('16-Mag-13') as dataesempio2,
	to_date('Maggio.16.2013') as dataesempio3
from dual;
In questo caso l'unico formato che funziona é quello del secondo esempio, perché tale formato corrisponde a quello attualmente in uso, come detto al punto 1)

3) come si utilizza to_char() ?

La funzione to_char() si può usare con diversi tipi di argomenti, ma in questi esempi consideriamo soltanto il caso in cui agisce su una data, per ottenere una stringa. Ha come primo argomento una data e come secondo argomento una stringa di formato: il risultato sarà mostrato secondo il formato indicato.
select 
	to_char(sysdate, 'DD-MONTH-YEAR') as formatoesempio,
	to_char(sysdate, 'DAY DD/MM/YYYY') as formatoesempio
from dual;  
4) che giorno é oggi?

select sysdate from dual;
Si noti che la visualizzazione del risultato dipende dal formato e dalla lingua, che si sono ricavati al punto 1.

4b) che giorno della settimana é oggi, e che ora é adesso ?

select to_char(sysdate, 'DAY HH24:MM:SS') from dual;
4c) quanti giorni sono passati dall'inizio dell'anno ad oggi?

select to_char(sysdate, 'DDD') as giorni_da_inizio_anno from dual;
5) che cosa indica il formato RR o RRRR?

Il formato RR o RRRR é simile al formato YYYY, ma con le seguenti particolarità.
Se viene fornita una data a due cifre compresa tra 50 e 99, allora il sistema la interpreterà come data del 20mo secolo, e metterà all'inizio la cifra 19.
select
	TO_CHAR(TO_DATE('17/04/93','DD/MM/RR'),'DD/MM/YYYY') as data_20_secolo
from dual;

Se viene fornita una data a due cifre compresa tra 0 e 49, allora il sistema la interpreterà come data del 21mo secolo, e metterà all'inizio la cifra 20.
select
	TO_CHAR(TO_DATE('17/04/13','DD/MM/RR'),'DD/MM/YYYY') as data_21_secolo
from dual;

Se viene fornita una data a quattro cifre, allora il sistema non interpreterà nulla, riportando la data introdotta così com'é.
select
	TO_CHAR(TO_DATE('17/04/2313','DD/MM/RR'),'DD/MM/YYYY') as data
from dual;
6) come si fa la differenza tra due date?

Ad esempio, quanti giorni sono passati dallo scorso 14 gennaio 2014 ad oggi ?
select sysdate - to_date('2014-01-14' ,'YYYY-MM-DD') as giorni_passati from dual;
Il risultato é un numero FLOAT che é il numero di giorni richiesto. Il risultato contiene una frazione perché nella data espressa da sysdate, viene considerata anche la componente relativa al tempo (ore, minuti, secondi).

6b)

Nell'esempio seguente i primi due risultati sono identici (e sono uguali a undici), perché dove non é specificata esplicitamente dentro il formato la componente del tempo (ore, minuti, secondi) questa viene posto a zero di default.
Il terzo risultato invece é di poco superiore a undici, poiché la data maggiore ha come componente del tempo i seguenti valori: zero ore, zero minuti, un secondo.
select 
to_date('2014-01-14' ,'YYYY-MM-DD') - to_date('2014-01-03' ,'YYYY-MM-DD') as risultato1,
to_date('2014-01-14 00:00:00' ,'YYYY-MM-DD HH24:MI:SS') - to_date('2014-01-03 00:00:00' ,'YYYY-MM-DD HH24:MI:SS') as risultato2, 
to_date('2014-01-14 00:00:01' ,'YYYY-MM-DD HH24:MI:SS') - to_date('2014-01-03 00:00:00' ,'YYYY-MM-DD HH24:MI:SS') as risultato3 
from dual;
6c) quanti secondi sono passati dallo scorso 14 gennaio 2014 ad oggi?

select (sysdate - to_date('2014-01-14' ,'YYYY-MM-DD')) * 86400 as secondi_passati  from dual; 
Si noti che la precedente, é difatto la medesima select del punto 6) con l'aggiunta del fattore 86400, che indica il numero di secondi in un giorno.

7) come si fa ad aggiungere 4 giorni ad una data?

select sysdate + 4   as tra_4_giorni from dual;
select to_date('2014-01-14' ,'YYYY-MM-DD')  + 4   from dual;  
7b) come si fa a togliere 3 giorni ad una data?

select sysdate - 3   as tre_giorni_fa from dual;  
8) come si fa ad aggiungere 6 mesi ad una data?

select ADD_MONTHS(sysdate, 6) tra_6_mesi from dual;  
8b) come si fa a togliere 6 mesi ad una data?

select ADD_MONTHS(sysdate, -6) sei_mesi_fa from dual; 
testo di accompagnamento testo di accompagnamento

9) come si fa ad aggiungere 9 settimane ad una data?

utilizzando quanto visto ai punti 7) e 7b), si ottiene:
select sysdate + 9 * 7   as tra_9_settimane from dual;
testo di accompagnamento testo di accompagnamento

10) come si fa ad aggiungere 10 anni ad una data?

utilizzando quanto visto ai punti 8) e 8b), si ottiene:
select ADD_MONTHS(sysdate, 10 * 12) tra_10_anni from dual;
11) come si fa il confronto tra due date?

Negli esempi seguenti, si noti che non é importante il formato della data.
Ciò che importa é che il confronto avvenga effettivamente tra delle date e non, per esempio, tra delle stringhe.
select 1 
from dual 
where to_date('2014-01-14' ,'YYYY-MM-DD')  > to_date('11-GEN-2014' ,'DD-MON-YYYY');
select count(*)
from employees
where hire_date <= to_date('16.Maggio.2003', 'DD.Month.YYYY');
12) come si fa ad effettuare la ricerca con la data in un intervallo?

SELECT *
FROM employees
WHERE hire_date BETWEEN 
		TO_DATE ('2003/01/01', 'yyyy/mm/dd') AND TO_DATE ('2003/12/31', 'yyyy/mm/dd');  
Si noti che nella suddetta select sono compresi gli estremi, e di fatto é equivalente alla seguente:

SELECT *
FROM employees
WHERE hire_date >= TO_DATE('2003/01/01', 'yyyy/mm/dd')
AND   hire_date <= TO_DATE('2003/12/31','yyyy/mm/dd');
13) come si fa ad estrarre da una data, soltanto il giorno/mese/anno ?

SELECT 
	EXTRACT(day FROM to_date('25.04.2012','DD.MM.YYYY')) "Giorno",
	EXTRACT(month FROM to_date('25.04.2012','DD.MM.YYYY')) "Mese",
	EXTRACT(year FROM to_date('25.04.2012','DD.MM.YYYY')) "Anno"
from dual;
  
14) come si ricava l'ultimo giorno del mese?

La funzione LAST_DAYS restituisce la data dell'ultimo giorno del mese che contiene la data. La seguente select determina quanti giorni rimangono nel mese corrente.
SELECT sysdate,
   LAST_DAY(sysdate) "Ultimo",
   LAST_DAY(sysdate) - sysdate "Giorni rimasti"
FROM DUAL;
15) per la data fornita, come si ricava il primo giorno della settimana/mese/anno ?

Si noti che il primo giorno della settimana é da intendersi come il primo lunedì prima della data indicata.
SELECT 
	TRUNC(TO_DATE('16-GEN-14'), 'DAY'),
	TRUNC(TO_DATE('16-GEN-14'), 'MONTH'), 
	TRUNC(TO_DATE('16-GEN-14'), 'YEAR') 
FROM dual;  
16) come si fa ad ottenere l'ultimo giorno dell'anno?

select ADD_MONTHS(trunc(sysdate,'YEAR'),12)-1  as ultimo_giorno 
from dual; 


Credits

 

Commenti  

Ant_gef_o
+4 #1 Ant_gef_o 2014-02-24 11:46
Grazie, mi è stato mooolto utile per un lavoro.

You have no rights to post comments

PHP Classes

IFile
by isApp.it

nominee
November 2013